CF995

A

link

如果选择这一天做题可以让差增加(即我这一天的题数大于他下一天的题数),则选;否则不选。
特殊的,另一个人地n+1天我们钦定他做了0道题。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n;
int a[105],b[105];

void qwq(){
	
	cin >> n;
	for(int i = 1;i <= n;++ i)
		cin >> a[i];
	for(int i = 1;i <= n;++ i)
		cin >> b[i];
	b[n+1] = 0;
	
	int ans = 0;
	for(int i = 2;i <= n+1;++ i)
		if(a[i-1]-b[i] > 0) ans += a[i-1]-b[i];
	cout << ans << endl;
	
}

signed main(){
	
	int t;
	cin >> t;
	while(t--) qwq();
	
	return 0;
	
}

B

link

判断即可。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n,a,b,c;

void qwq(){
	cin >> n >> a >> b >> c;
	int sum = a+b+c;
	int w = n/sum;
	int q = n%sum;
	w *= 3;
	if(q != 0&&q <= a) w++;
	else if(q != 0&&q <= a+b) w += 2;
	else if(q != 0)w += 3;
	cout << w << endl;
}

signed main(){
	
	int t;
	cin >> t;
	while(t--) qwq();
	
	return 0;
	
}

C

link

如果k=n,那么都可以。
如果k<n1,那么都不行。
如果k=n1,那么如果没有的那个他恰好不会,则行,否则不行。
用一个bool数组havi1代表i这个题他会,0代表i这个题不会。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n,m,k;
int hav[300005];
int a[300005];
int q[300005];

void qwq(){
	
	cin >> n >> m >> k;
	memset(hav,0,sizeof(hav));
	for(int i = 1;i <= m;++ i)
		cin >> a[i];
	for(int i = 1;i <= k;++ i)
		cin >> q[i],hav[q[i]] = 1;
	
	for(int i = 1;i <= m;++ i){
		if(k == n) cout << 1;
		else if(k < n-1) cout << 0;
		else if(hav[a[i]] == 0) cout << 1;
		else cout << 0;
	}
	cout << endl;
	
}

signed main(){
	
	int t;
	cin >> t;
	while(t--) qwq();
	
	return 0;
	
}

D

link

二分,枚举选出来的第一个数(靠前那个)是ai,算出来第二个数(要在i+1 n中选)要在什么范围内使得满足总和在x y,设算出来的范围为mn mx,如果mn比最大数还大,不行,如果mx比最小数还小,也不行,剩下的就是可以的情况,二分找出这个范围对应的下标范围即可。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n,x,y;
int a[200005];
int sum;

void qwq(){
	
	cin >> n >> x >> y;sum = 0;
	for(int i = 1;i <= n;++ i)
		cin >> a[i],sum += a[i];
	
	sort(a+1,a+1+n);
	
	int ans = 0;
	for(int i = 1;i < n;++ i){
		int w = sum-a[i];
		int mn = w-y;
		int mx = w-x;
		if(mx < a[i+1]) continue;
		if(mn > a[n]) continue;
		int l = i+1,r = n,mid;
		while(l < r){
			mid = (l+r)/2;
			if(a[mid] >= mn) r = mid;
			else l = mid+1;
		}
		w = r;
		l = i+1,r = n;
		while(l < r){
			mid = (l+r+1)/2;
			if(a[mid] <= mx) l = mid;
			else r = mid-1;
		}
		ans += l-w+1;
	}
	cout << ans << endl;
	
}

signed main(){
	
	int t;
	cin >> t;
	while(t--) qwq();
	
	return 0;
	
}

E

link

可以理解,价钱一定是a数组和b数组2n个数中的一个。
那么枚举每一个数,二分算出销售量(有多少个bi大于价钱)和差评数(销售量减去有多少个ai大于价钱(有多少个ai大于价钱即好评数)),判断即可。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n,k;
int a[200005],b[200005];
int ans;

void solve(int x){
	int xl = n-(lower_bound(b+1,b+1+n,x)-b-1);
	int cp = xl-(n-(lower_bound(a+1,a+1+n,x)-a-1));
	if(cp > k) return;
	ans = max(ans,xl*x);
}

void qwq(){
	
	cin >> n >> k;
	for(int i = 1;i <= n;++ i)
		cin >> a[i];
	for(int i = 1;i <= n;++ i)
		cin >> b[i];
	
	sort(a+1,a+1+n);
	sort(b+1,b+1+n);
	ans = 0;
	for(int i = 1;i <= n;++ i){
		solve(a[i]);solve(b[i]);
	}
	cout << ans << endl;
	
}

signed main(){
	
	int t;
	cin >> t;
	while(t--) qwq();
	
	return 0;
	
}
posted @   不认命,就是哪吒的命!  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示