算法进阶指南:第一章练习题

news2024/12/26 22:48:54

1.The Pilots Brothers' refrigerator

牛客竞赛-The Pilots Brothers' refrigerator

116. 飞行员兄弟 - AcWing题库

开关问题的特点是每个开关只会作用某个特定范围,所以每个开关最多操作一次,且操作先后次序对最后结果无影响。用16位二进制存储状态,1表示关,0表示开。枚举所有的操作情况,1表示拨动开关,0表示不操作。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=10007;
const int N=1010;
int mp[4][4];
void solve()
{
	vector<pii>ans;
	string s;
	int c=0;
	rep(i,0,4){
		cin>>s;
		rep(j,0,4) if(s[j]=='+') c+=(1<<4*i+j);
	}
	rep(i,0,4) rep(j,0,4){
		rep(k,0,4) mp[i][j]+=(1<<4*i+k)+(1<<4*k+j);
		mp[i][j]-=(1<<4*i+j); 
	}
	rep(i,0,1<<16){
		int cc=c;
		vector<pii>v;
		rep(j,0,16) if(i>>j&1){
			int x=j/4,y=j%4;
			cc^=mp[x][y];
			v.push_back({x+1,y+1});
		}
		if(cc==0&&(ans.size()==0||v.size()<ans.size())) ans=v;
	}
	cout<<ans.size()<<endl;
	for(auto i:ans) cout<<i.fi<<" "<<i.se<<endl;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_; 
	while(_--){
		solve();
	}
	return 0;
}

2.占卜DIY

牛客竞赛-占卜DIY

117. 占卜DIY - AcWing题库

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=10007;
const int N=1010;
struct node{
	deque<pii>q;
}T[N];
int mp(char ch)
{
	if(ch>='2'&&ch<='9') return ch-'0';
	if(ch=='0') return 10;
	if(ch=='A') return 1;
	if(ch=='J') return 11;
	if(ch=='Q') return 12;
	if(ch=='K') return 13;
}
void solve()
{
	char ch;
	rep(i,1,14){
		rep(j,0,4) cin>>ch,T[i].q.push_back({mp(ch),0});
	}
	rep(i,0,4){
		int x=T[13].q[i].fi;
		while(x!=13){
			T[x].q.push_front({x,1});
			int t=x;
			x=T[x].q[T[x].q.size()-1].fi;
			T[t].q.pop_back();
		}
	}
	map<int,int>mmp;
	rep(i,1,13){
		for(auto j:T[i].q) if(j.se&&j.fi!=13) ++mmp[j.fi];
	}
	int cnt=0;
	for(auto i:mmp) if(i.se==4) ++cnt;
	cout<<cnt;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_; 
	while(_--){
		solve();
	}
	return 0;
}

3.Fractal

牛客竞赛-Factal

118. 分形 - AcWing题库

用cal(n,x,y)表示将规模为n的,且左上角坐标为(x,y)的图像填写在char a[][]中。递归填写完了之后直接输出a即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
#define INF 1e12
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=1e9+7;
const int N=1010;
char a[N][N];
void cal(int n,int x,int y)
{
	if(n==1){
		a[x][y]='X';
		return;
	}
	int len=pow(3,n-2);
	cal(n-1,x,y),cal(n-1,x,y+2*len),cal(n-1,x+len,y+len),cal(n-1,x+2*len,y),cal(n-1,x+2*len,y+2*len);
}
void solve()
{
	rep(i,0,N) rep(j,0,N) a[i][j]=' ';
	int n;
	while(cin>>n){
		if(n==-1) break;
		cal(n,0,0);
		int len=pow(3,n-1);
		rep(i,0,len){
			rep(j,0,len) cout<<a[i][j];
			cout<<endl;
		}
		cout<<"-"<<endl;
	}
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_; 
	while(_--){
		solve();
	}
	return 0;
}

 4.Raid

牛客竞赛-Raid

119. 袭击 - AcWing题库

对于某一个特工,如果只有一个维度,只用找到离x最近的一个核电站。如果是二维,最短的答案距离这个核电站不会太远,检查相邻的几个更新答案即可。

先把特工,核电站按照x从小到大排序。双指针算法:遍历特工i,每次在核电站中找到第一个x大于等于特工的核电站,用左边5个和右边5个来更新答案。指向核电站的指针只会向右移。

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=100010;
pii a[N],b[N];
db dis(int i,int j)
{
	db res=(db)(b[i].fi-a[j].fi)*(b[i].fi-a[j].fi)+(db)(b[i].se-a[j].se)*(b[i].se-a[j].se);
	return sqrt(res);
}
void solve()
{
	int n;
	cin>>n;
	rep(i,0,n) cin>>a[i].fi>>a[i].se;
	rep(i,0,n) cin>>b[i].fi>>b[i].se;
	sort(a,a+n),sort(b,b+n);
	db ans=1e18;
	int k=0;
	rep(i,0,n){
		while(k<n&&a[k].fi<b[i].fi) ++k;
		rep(j,k-5,k+6) if(j>=0&&j<n) ans=min(ans,dis(i,j));
	}
	cout.setf(ios::fixed);
	cout<<setprecision(3)<<ans<<endl;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

可参考相似题目:

平面上的最接近点对 - 洛谷

5.防线

牛客竞赛-防线

120. 防线 - AcWing题库

因为最多只有一个奇数点,可以很容易算出来<=x所有数的和,如果为奇数,说明答案包含在这个区间里,根据这个性质做二分。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=200010;
int n;
struct node{
	int s,e,d;
}T[N];
LL sum(int x)
{
	LL res=0;
	rep(i,0,n) if(T[i].s<=x) res+=(min(T[i].e,x)-T[i].s)/T[i].d+1;
	return res;
}
void solve()
{
	int l=0,r=0;
	cin>>n;
	rep(i,0,n) cin>>T[i].s>>T[i].e>>T[i].d,r=max(r,T[i].e);
	while(l<r){
		int m=l+r>>1;
		if(sum(m)&1) r=m;
		else l=m+1;
	}
	LL res=sum(l)-sum(l-1);
	if(res&1) cout<<l<<" "<<res<<endl;
	else cout<<"There's no weakness."<<endl;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

6.Corral the Cows

牛客竞赛-Corral the Cows

121. 赶牛入圈 - AcWing题库

将坐标离散化,二维前缀和预处理出矩形包含点的个数。最后二分正方形的边长即可。

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=1010;
int c,n,s[N][N],mp[N];
pii p[N];
vector<int>vx,vy;
void disc(vector<int>&v)
{
	sort(all(v));
	v.erase(unique(all(v)),v.end());
}
int get(int x,vector<int>&v)
{
	return lower_bound(all(v),x)-v.begin();
}
bool che(int len)
{
	int px=0,py=0;
	rep(y,1,vy.size()){
		while(vy[y]-vy[py+1]+1>len) ++py;
		mp[y]=py;
	}
	rep(x,1,vx.size()){
		while(vx[x]-vx[px+1]+1>len) ++px;
		rep(y,1,vy.size()){
			py=mp[y];
			if(s[x][y]-s[px][y]-s[x][py]+s[px][py]>=c) return true;
		}
	}
	return false;
}
void solve()
{
	cin>>c>>n;
	vx.push_back(0),vy.push_back(0);
	rep(i,0,n){
		cin>>p[i].fi>>p[i].se;
		vx.push_back(p[i].fi),vy.push_back(p[i].se);
	}
	disc(vx),disc(vy);
	rep(i,0,n) ++s[get(p[i].fi,vx)][get(p[i].se,vy)];
	int h=max(vx.size(),vy.size());
	rep(i,1,h) rep(j,1,h) s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
	int l=1,r=10000;
	while(l<r){
		int m=l+r>>1;
		if(che(m)) r=m;
		else l=m+1;
	}
	cout<<l;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

7.糖果传递

 122. 糖果传递 - AcWing题库

 牛客竞赛-糖果传递

[HAOI2008]糖果传递 - 洛谷

设ai对ai+1传递了xi个糖果(xn为an给a1,若xi取负值代表反向传递)。目标就是求\sum_{i=1}^{n}\left | x_{i} \right |

的最小值。

设平均值为m,可以列出以下等式:

\left\{\begin{matrix} a_{1}+x_{n}-x_{1}=m\\ a_{2}+x_{1}-x_{2}=m \\ ... \\ a_{n}+x_{n-1}-x_{n}=m \end{matrix}\right.

把等式前i项加起来,构成一个新的方程组:

 \left\{\begin{matrix} a_{1}+x_{n}-x_{1}=m\\ (a_{1}+a_{2})+x_{n}-x_{2}=2m \\ ... \\ (a_{1}+a_{2}+...+a_{n})+x_{n}-x_{n-1}=(n-1)m \end{matrix}\right.

整理一下,把x1~xn-1用xn表示:

\left\{\begin{matrix} |x_{1}|=|a_{1}+x_{n}-m|\\ |x_{2}|=|(a_{1}+a_{2})+x_{n}-2m| \\ ... \\ |x_{n-1}|=|(a_{1}+...+a_{n-1})+x_{n}-(n-1)m| \\ |x_{n}|=|x_{n}| \end{matrix}\right.

发现只有xn一个变量,问题转化成了货仓选址问题。 

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=1e6+10;
int a[N];
LL s[N];
void solve()
{
	int n,m;
	cin>>n;
	rep(i,1,n+1) cin>>a[i],s[i]=s[i-1]+a[i];
	m=s[n]/n;
	vector<LL>v(n,0);
	rep(i,1,n) v[i]=(LL)i*m-s[i];
	sort(all(v));
	LL x=v[n/2],ans=0;
	for(auto i:v) ans+=abs(x-i);
	cout<<ans;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

8.Soldiers  

123. 士兵 - AcWing题库

 x和y分开看,y相同只要移到y的中位数即可。下面把x移成相邻的,假设x排序后的序列x_{1},x_{2},...,x_{n},移动后新的序列为a,a+1,a+2,...,a+n-1,需要求|x_{1}-a|+|(x_{2}-1)-a|+...+|(x_{n}-n+1)-a|

的最小值,把他看成一个新序列,a就是取x_{1},x_{2}-1,...,x_{n}-n+1的中位数。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=10010;
int x[N],y[N]; 
void solve()
{
	int n;
	cin>>n;
	rep(i,0,n) cin>>x[i]>>y[i];
	if(n==0){
		cout<<0;
		return;
	}
	sort(x,x+n),sort(y,y+n);
	rep(i,0,n) x[i]-=i;
	sort(x,x+n);
	int ans=0;
	rep(i,0,n) ans+=abs(y[i]-y[n/2])+abs(x[i]-x[n/2]);
	cout<<ans<<endl;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_; 
	while(_--){
		solve();
	}
	return 0;
}

9.NUMBER BASE CONVERSION 

牛客竞赛-NUMBER BASE CONVERSION

 124. 数的进制转换 - AcWing题库

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=200010;
map<char,int>mp;
map<int,char>mmp;
void init()
{
	for(char i='A';i<='Z';++i) mp[i]=i-'A'+10,mmp[i-'A'+10]=i;
	for(char i='a';i<='z';++i) mp[i]=i-'a'+36,mmp[i-'a'+36]=i;
	for(char i='0';i<='9';++i) mp[i]=i-'0',mmp[i-'0']=i;
}
void solve()
{
	int a,b;
	string s,ans;
	cin>>a>>b>>s;
	vector<int>v;
	per(i,s.size()-1,-1) v.push_back(mp[s[i]]);
	while(v.size()){
		int c=0;
		per(i,v.size()-1,-1){
			v[i]+=c*a;
			c=v[i]%b;
			v[i]/=b;
		}
		ans+=mmp[c];
		while(v.size()&&v.back()==0) v.pop_back();
	}
	reverse(all(ans));
	cout<<a<<" "<<s<<endl;
	cout<<b<<" "<<ans<<endl;
	cout<<endl;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	cin>>_;
	init();
	while(_--){
		solve();
	}
	return 0;
}

10. Cow Acrobats

牛客竞赛-Cow Acrobats

125. 耍杂技的牛 - AcWing题库

[USACO05NOV]奶牛玩杂技 - 洛谷

和国王的游戏哪个题几乎一样,只不过改成加减法了。贪心策略是w+s升序排列。

可以用微扰法证明:假设有w_{i}+s_{i}<=w_{i+1}+s_{i+1},sum为上面所有牛的重量和,交换前局部的解为max(sum-s_{i},sum+w_{i}-s_{i+1}),交换后解为:max(sum-s_{i+1},sum+w_{i+1}-s_{i}).

为了方便比较所有值有加上s_{i}+s_{i+1}-sum,就变成了:

交换前:max(s_{i+1},w_{i}+s_{i})

交换后:max(s_{i},w_{i+1}+s_{i+1})

w_{i+1}+s_{i+1}>=w_{i}+s_{i}>=s_{i},交换后一定取w_{i+1}+s_{i+1},交换前不管是取哪个都不会比w_{i+1}+s_{i+1}大,明显这种情况交换前更优。

最后要注意答案可能是负数。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=1e9+7;
const int N=50010;
pii p[N];
bool cmp(pii a,pii b)
{
	return a.fi+a.se<b.fi+b.se;
}
void solve()
{
	int n;
	cin>>n;
	rep(i,0,n) cin>>p[i].fi>>p[i].se;
	sort(p,p+n,cmp);
	int s=0,ans=-2e9;
	rep(i,0,n) ans=max(ans,s-p[i].se),s+=p[i].fi;
	cout<<ans;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_; 
	while(_--){
		solve();
	}
	return 0;
}

11.To the Max

126. 最大的和 - AcWing题库

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=110;
int a[N][N];
void solve()
{
	int n,ans=-1e9;
	cin>>n;
	rep(i,1,n+1) rep(j,1,n+1) cin>>a[i][j],a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
	rep(i,1,n+1) rep(j,1,n+1) rep(k,i,n+1) rep(z,j,n+1){
		int res=a[k][z]-a[k][j-1]-a[i-1][z]+a[i-1][j-1];
		ans=max(ans,res);
	}
	cout<<ans<<endl;
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int _=1;
	//cin>>_; 
	while(_--){
		solve();
	}
	return 0;
}

12.Task 

127. 任务 - AcWing题库

关注获利公式和数据量,y取最大所得到的获利都不如x取最小,所以应该先满足x,再考虑y。 

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N=100010;
typedef long long ll;
typedef pair<int,int> P;
typedef multiset<int> MS;
P M[N],T[N];
MS ys;
int main()
{
	int m,t;
	while(scanf("%d%d",&m,&t)!=EOF){
		int cnt=0;
		ll ans=0;
		ys.clear();
		for(int i=0;i<m;++i) scanf("%d%d",&M[i].x,&M[i].y);
		for(int i=0;i<t;++i) scanf("%d%d",&T[i].x,&T[i].y);
		sort(M,M+m),sort(T,T+t);
		for(int i=t-1,j=m-1;i>=0;--i){
			while(j>=0&&M[j].x>=T[i].x) ys.insert(M[j].second),--j;
			MS::iterator it=ys.lower_bound(T[i].y);
			if(it!=ys.end()){
				++cnt;
				ans+=500*T[i].x+2*T[i].y;
				ys.erase(it);
			}
		}
		printf("%d %lld\n",cnt,ans);
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/164698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 过场工具(Cutscene)设计(一)

Unity 过场工具(Cutscene)设计&#xff08;一&#xff09; 游戏中通常会涉及到过场内容的制作&#xff0c;从而来进行一些强表现&#xff0c;从而来进行剧情相关的串联&#xff0c;使游戏表现类容更丰富。比较典型的游戏 像原神&#xff0c;天刀等等游戏。 过场工具制作选择 过…

Java程序设计实验2 | Java语言基础(1)

*本文是博主对Java各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 目录 一、实验…

写在壬寅年末,2023年春节

先回顾过去几年写过的年末总结写在戊戌年末&#xff0c;2019年春节写在己亥年末&#xff0c;2020年春节写在庚子年末&#xff0c;2021年春节写在辛丑年末&#xff0c;2022年春节又一个农历年即将过去&#xff0c;写下这样的年末总结&#xff0c;已经是第5年&#xff0c;于是便有…

Nginx面试题(史上最全 + 持续更新)

尼恩面试宝典专题39&#xff1a;Nginx面试题&#xff08;史上最全、持续更新&#xff09; 本文版本说明&#xff1a;V27 《尼恩面试宝典》升级规划为&#xff1a; 后续基本上&#xff0c;每一个月&#xff0c;都会发布一次&#xff0c;最新版本&#xff0c;可以联系构师尼恩…

本周大新闻|传苹果MR开发样机已送出,比尔盖茨:不太看好Web3和元宇宙

本周大新闻&#xff0c;AR方面&#xff0c;苹果软件曝光“Reality OS”和“xrOS”&#xff1b;IVAS项目仅获批4000万美元&#xff1b;比尔盖茨&#xff1a;不太看好Web3和元宇宙&#xff1b;DigiLens工业AR眼镜ARGO&#xff1b;Kopin拆分部分OLED部门&#xff1b;LetinAR展示塑…

【Linux】gcc/g++的使用

这里写目录标题&#x1f696;gcc如何使用&#x1f696;函数库&#x1f308;动态库和静态库&#x1f696;gcc如何使用 ✒️预处理 预处理功能主要包括宏定义、文件包含、条件编译、去掉注释 实例&#xff1a; gcc -E myfile.c -o myfile.i “-E&#xff08;大写&#xff09;”&…

JVM(二)——参数调优

JVM参数调优 前言 你说你做过JVM调优和参数配置&#xff0c;请问如何盘点查看JVM系统默认值 使用jps和jinfo进行查看 -Xms&#xff1a;初始堆空间 1/64 -Xmx&#xff1a;堆最大值 1/4 -Xss&#xff1a;栈空间-Xms 和 -Xmx最好调整一致&#xff0c;防止JVM频繁进行收集和…

微信小程序项目实例——摇色子

微信小程序项目实例——摇色子 文章目录微信小程序项目实例——摇色子一、项目展示二、核心代码三、效果图文末项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 摇色子是一款简易的游戏类小程序 用户可以投出1-9个色子 二、核心代码 dice.wxml <!--pages/dic…

编解码标准-H.264

H.264是MPEG-4家族中的一员&#xff0c;即MPEG-4系列文档ISO-14496的第10部分&#xff0c;因此被称作MPEG-4 AVC&#xff0c;MPEG-4重点考虑灵活性和交互性&#xff0c;而H.264着重强调更高的编码压缩率和传输的可靠性。 1、H.264 编码流程 1.1、slice&block 第一步&…

字节面试官: 让你设计一个MQ每秒要抗几十万并发,怎么做?

目录 1、页缓存技术 磁盘顺序写2、零拷贝技术3、最后的总结 这篇文章来聊一下Kafka的一些架构设计原理&#xff0c;这也是互联网公司面试时非常高频的技术考点。 Kafka是高吞吐低延迟的高并发、高性能的消息中间件&#xff0c;在大数据领域有极为广泛的运用。配置良好的Kaf…

电商项目之如何迁移千万级别的数据表

1 背景 电商系统一般都会有一张表记录买家的浏览器信息&#xff0c;包含但不限于浏览器ip、浏览器cookie信息、浏览器user-agent、当前页面的url、当前页面的refer。买家在电商网站上每一次操作&#xff0c;都会记录到该表。该表的数量量至少达到千万级级别。该表有什么用处&a…

07.优雅地断开套接字连接

优雅地断开套接字连接 本章将讨论如何优雅地断开相互连接的套接字。之前用的方法不够优雅是因为&#xff0c;我们是调用close或closesocket函数单方面断开连接的。 基于TCP的半关闭 TCP中的断开连接过程比建立连接过程更重要&#xff0c;因为连接过程中一般不会出现大的变数…

八、MySQL 常用函数汇总(1)

文章目录一、函数1.1 函数简介1.2 不同DBMS函数的差异二、数学函数2.1 绝对值函数ABS(x)和返回圆周率的函数PI()2.2 平方根函数SQRT(x)和求余函数MOD(x,y)2.3 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x)2.4 获取随机数的函数RAND()和RAND(x)2.5 函数ROUND(x)、ROUND(x,y)和T…

keytool 工具介绍

使用JDK自带的 keytool 工具&#xff1a; 简介 keytool 命令是一个密钥和证书管理的工具。它允许用户使用数字签名管理自己的公钥/私钥对和相关证书&#xff0c;用于自我身份验证(向其他用户和服务验证自己)或数据完整性和身份验证服务。keytool 命令还允许用户缓存通信对等体…

【七牛云 后端】笔试面

一、选择、填空知识点整理 1. fork() 函数 fork() 函数通过系统调用创建一个与原来进程相同的进程&#xff08;如果初始参数或者传入的变量不同&#xff0c;两个进程也可以做不同的事&#xff09; 示例 —— #include <stdio.h> int main() {for(int i0; i<2; i){…

centos7 安装git

一、查看是否安装过git git --version若出现以上版本号&#xff0c;则代表已经安装了git&#xff0c;不需要再次安装了&#xff0c;git安装&#xff0c;分为用yum安装和下载git源码编译安装&#xff0c;以下两种方法&#xff1a; 二、使用yum安装git yum -y install git安装…

磨金石教育摄影技能干货分享|如何在纪实摄影中体现艺术内涵

纪实摄影往往是摄影师在生活中或者旅行中随手拍下的&#xff0c;记录人们平常的瞬间。这类摄影往往强调真实性&#xff0c;在技巧上不会过多的追求。但有时候摄影师为了体现照片中更多的内涵&#xff0c;或者个人的情感思想&#xff0c;会运用一些摄影技巧来表现。下面就让我们…

动态内存与动态内存函数详解

文章目录前言一、动态内存函数的介绍1.malloc函数2.calloc3.realloc4.free二、两种常见的内存申请方法1.返回指针2.传二级指针三.常见的动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分…

6. 描述性统计函数:summary 、Fivenum、describe、describeBy、stat.desc、 Aggregate、summaryBy

b站课程视频链接&#xff1a; https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新&#xff0c;但是要花钱&#xff0c;我花99&#x1f622;&#x1f622;元买了&#xff0c;感觉讲的没问题&#xff0c;就是知识点结构有点乱&#xff0c;有点废话&#xff09;&…

ESP32设备驱动-ADXL345三轴加速计驱动

ADXL345三轴加速计驱动 文章目录 ADXL345三轴加速计驱动1、ADXL345介绍2、硬件准备3、软件准备4、驱动实现1、ADXL345介绍 ADXL345 是一款小型、薄型、低功耗、3 轴加速度计,具有高达 16g 的高分辨率(13 位)测量值。数字输出数据采用 16 位二进制补码格式,可通过 SPI(3 线…