CF998

A

link

总共就三组,看一下每一组如果满足要让它是多少,看看最多有几个相同的,最多有几个相同的就满足这些,就可以满足这么多组。

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

using namespace std;

int a[10];
int c[5];

void qwq(){
	
	cin >> a[1] >> a[2] >> a[4] >> a[5];
	
	c[1] = a[1]+a[2];
	c[2] = a[4]-a[2];
	c[3] = a[5]-a[4];
	
	sort(c+1,c+4);
	
	if(c[1] == c[2]&&c[2] == c[3]) cout << 3;
	else if(c[1] == c[2]||c[2] == c[3]) cout << 2;
	else cout << 1;
	cout << endl;
	
}

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

B

link

以第一组数(0~n1)的顺序为准,看看后面的数是否符合这个顺序即可。
如果第一组数无法全部覆盖n个人,也就是说有人有1个以上第一组数,直接不行。

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

using namespace std;

int n,m;
int c[2005][2005];
int p[2005];

void qwq(){
	
	cin >> n >> m;
	for(int i = 1;i <= n;++ i){
		for(int j = 1;j <= m;++ j){
			cin >> c[i][j];
		}
		sort(c[i]+1,c[i]+1+m);
	}
	
	for(int i = 1;i <= n;++ i){
		if(c[i][1] >= n){
			cout << -1 << endl;
			return;
		}
		p[c[i][1]+1] = i;
	}
	
	int tp = n;
	for(int j = 2;j <= m;++ j){
		for(int i = 1;i <= n;++ i){
			if(c[p[i]][j] != tp){
				cout << -1 << endl;
				return;
			}
			tp++;
		}
	}
	
	for(int i = 1;i <= n;++ i) cout << p[i] << " ";
	cout << endl;
	
}

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

C

link

先手是没有任何优势的,也就是说,如果有一对可以凑成k,一定是可以用到的(先手选了,后手直接选配对的即可),就算有几对可以凑成k即可。

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

using namespace std;

int n,k;
int x[200005];
int d[200005];
int cnt;

map<int,int> gs;

void qwq(){
	
	gs.clear();
	
	cin >> n >> k;
	for(int i = 1;i <= n;++ i)
		cin >> x[i],gs[x[i]]++;
	
	cnt = 0;
	sort(x+1,x+1+n);
	for(int i = 1;i <= n;++ i)
		if(x[i] != x[i-1]) d[++cnt] = x[i];
	
	int ans = 0;
	for(int i = 1;i <= cnt;++ i){
		int c = k-d[i];
		if(d[i] < c) ans += min(gs[d[i]],gs[c]);
		else if(d[i] == c) ans += gs[d[i]]/2;
		else break;
	}
	
	cout << ans << endl;
	
}

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

D

link

首先我们可以发现,题目中的操作一定会让一个数变成0,而且如果一个数和那个0做操作一定是不变的。
那么如果做不到单调不减一定是有形如0x0x>0)的东西,那么想要形成这样的东西,从头到尾的做一遍一定可以(脑补一下)
首先假设它先变成了0x,那么它后面会是0当且仅当后面一个数比x小,那么不管什么顺序,这个数只会变小不会变大,所以它一直会比x小,就一定会出现0x0,所以我们从头到尾做一遍肯定和其他顺序答案是一样的。

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

using namespace std;

int n;
int a[200005];

void qwq(){
	
	cin >> n;
	
	for(int i = 1;i <= n;++ i){
		cin >> a[i];
		if(i != 1){
			int t = min(a[i],a[i-1]);
			a[i] -= t;
			a[i-1] -= t;
		}
	}
	
	for(int i = 1;i < n;++ i){
		if(a[i] > a[i+1]){
			cout << "NO\n";
			return;
		}
	}
	
	cout << "YES\n";
	
}

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