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\)~\(n-1\))的顺序为准,看看后面的数是否符合这个顺序即可。
如果第一组数无法全部覆盖\(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\)做操作一定是不变的。
那么如果做不到单调不减一定是有形如\(0、x、0\)(\(x>0\))的东西,那么想要形成这样的东西,从头到尾的做一遍一定可以(脑补一下)。
点击查看代码
#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;}