考试的时候体感上感觉有点难.......敲完后其实感觉还行有点cf分格的一场难度分界特别明显赛时ac 7A签到#includebits/stdc.h#define int long long#define inf 0x3f3f3f3f3f3f3f#define GG ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define cnot coutNO\n#define cyes coutYES\n#define cans coutans\n#define pb push_back#define x0 first#define y0 second#define lc p1#define rc p1|1#define mem(a,b) memset(a,b,sizeof(a))#define sp(x) fixedsetprecision(x)#define all(v) v.begin(),v.end()#define fr(i,st,ed) for(int ist;ied;i)#define ffr(i,st,ed,dt) for(int ist;ied;idt)using namespace std;typedef pairint,stringPis;typedef pairint,intPii;const int N2e410,mod998244353,M1e610;int lowbit(int x){return x(-x);}void solve(){int a,b,c;cinabc;int maxxmax(a,max(b,c));int minxmin(a,min(b,c));if(maxx-minx1)cyes;else cnot;}signed main(){GG;int _t1;cin_t;while(_t--){solve();}}B:需要注意的是如果最大值是奇数个那么只有最大值能够获胜如果最大值有偶数个那最大值必不可能获胜但最大值可以通过和其他任意值相抵消的情况消掉任意值最后再自己相互抵消从而实现比最大值小的数都可以获胜#includebits/stdc.h#define int long long#define inf 0x3f3f3f3f3f3f3f#define GG ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define cnot coutNO\n#define cyes coutYES\n#define cans coutans\n#define pb push_back#define x0 first#define y0 second#define lc p1#define rc p1|1#define mem(a,b) memset(a,b,sizeof(a))#define sp(x) fixedsetprecision(x)#define all(v) v.begin(),v.end()#define fr(i,st,ed) for(int ist;ied;i)#define ffr(i,st,ed,dt) for(int ist;ied;idt)using namespace std;typedef pairint,stringPis;typedef pairint,intPii;const int N2e410,mod998244353,M1e610;int lowbit(int x){return x(-x);}void solve(){int n;cinn;vectorinta(n1),b(n1);int num-inf;//vectorboolst(n1,0);//unordered_mapint,intmp;fr(i,1,n){cina[i];//mp[a[i]];}ba;sort(a.begin()1,a.end(),greaterint());int maxxa[1];int maxo-1;fr(i,1,n){int ji;while(jna[j]a[i]){j;}int cntj-i;if(cnt1){maxoa[i];break;}ij;}fr(i,1,n){if(maxo-1)cout0;else{if(b[i]maxo){cout1;}else if(b[i]maxob[i]maxx){cout1;}else cout0;}}cout\n;}signed main(){GG;int _t1;cin_t;while(_t--){solve();}}C/D UNKNOWNE我们令初始矩阵为111110111100111000110000100000000000该矩阵满足条件12接下来考虑如何满足条件3在不破坏原有行列构造数字集合的前提下拆分连通块考虑偶数行的 1 变成列从右边依次往左放置即可#includebits/stdc.h#define int long long#define inf 0x3f3f3f3f3f3f3f#define GG ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define cnot coutNO\n#define cyes coutYES\n#define cans coutans\n#define pb push_back#define x0 first#define y0 second#define lc p1#define rc p1|1#define mem(a,b) memset(a,b,sizeof(a))#define sp(x) fixedsetprecision(x)#define all(v) v.begin(),v.end()#define fr(i,st,ed) for(int ist;ied;i)#define ffr(i,st,ed,dt) for(int ist;ied;idt)using namespace std;typedef pairint,stringPis;typedef pairint,intPii;const int N2e410,mod998244353,M1e610;int lowbit(int x){return x(-x);}void solve(){int n;cinn;vectorinta(n1);int l1;int rn;fr(i,1,n){if(i1){a[i]l;}else{a[i]r--;}}vectorvectorintans(n1,vectorint(n1));fr(i,1,n){fr(j,1,n){if(a[i]a[j])ans[i][j]1;else ans[i][j]0;}}fr(i,1,n){fr(j,1,n){coutans[i][j];}cout\n;}}signed main(){GG;int _t1;//cin_t;while(_t--){solve();}}Fngcd(x,y)|x-y|x^yx^y min n题目给了n的范围2^31,x的范围2^63,所以我们可以之间把x左移直到x1与x没有重合在令yx1x,xx1,这样x^yn;#includebits/stdc.h#define int long long#define inf 0x3f3f3f3f3f3f3f#define GG ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define cnot coutNO\n#define cyes coutYES\n#define cans coutans\n#define pb push_back#define x0 first#define y0 second#define lc p1#define rc p1|1#define mem(a,b) memset(a,b,sizeof(a))#define sp(x) fixedsetprecision(x)#define all(v) v.begin(),v.end()#define fr(i,st,ed) for(int ist;ied;i)#define ffr(i,st,ed,dt) for(int ist;ied;idt)using namespace std;typedef pairint,stringPis;typedef pairint,intPii;const int N2e410,mod998244353,M1e610;int lowbit(int x){return x(-x);}void solve(){int n;cinn;int x,y;fr(i,0,63){x(ni);if((xn)0){break;}}yxn;coutx y\n;}signed main(){GG;int _t1;cin_t;while(_t--){solve();}}G UNKNOWNH先翻译一下代码求s的所有前缀中不同字符个数的累加一般这种题的套路都是考虑每一个字符对最终答案的贡献对于s......a(1)......a(2)......我们考虑a2的贡献很显然只有当起点为a11--a2时a2才有贡献我们记a2的上一次出现为pre,很显然有贡献的起点个数为i-prei接下来考虑终点很显然终点是a2-n(n-i1)也就是a2的贡献长度是1-n-i1,显然贡献贡献长度所以每一个起点的贡献就是1-n-i1的累加ans(sum)(i-prei)*(i-n1)*(i-n2)/2#includebits/stdc.h#define int long long#define inf 0x3f3f3f3f3f3f3f#define GG ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define cnot coutNO\n#define cyes coutYES\n#define cans coutans\n#define pb push_back#define x0 first#define y0 second#define lc p1#define rc p1|1#define mem(a,b) memset(a,b,sizeof(a))#define sp(x) fixedsetprecision(x)#define all(v) v.begin(),v.end()#define fr(i,st,ed) for(int ist;ied;i)#define ffr(i,st,ed,dt) for(int ist;ied;idt)using namespace std;typedef pairint,stringPis;typedef pairint,intPii;const int N2e410,mod998244353,M1e610;int lowbit(int x){return x(-x);}void solve(){int n;cinn;vectorinta(n1,0);//vectorintnp(N,0);unordered_mapint,intnp;vectorintpre(n1,0);fr(i,1,n){cina[i];if(!np.count(a[i])){np[a[i]]i;}else{pre[i]np[a[i]];np[a[i]]i;}}int ans0;fr(i,1,n){ans((i-pre[i])*((n-i1)*(n-i2))/2);}cans;}signed main(){GG;int _t1;cin_t;while(_t--){solve();}}I卡B,想着先看I看到这么个玩意.....当时的感觉是 我以急哭。。。脑子超级混乱最后想着直接爆搜写考完一想好像确实是check题对于一个0/1字符如果矩阵里面有相同字符则一定可以1出发遇到1一定能够形成回文串100000.....10同理然后就解决了.......J这个反而是写下来感觉最简单的题之一低维求的是到任意高维的最短路那我们可以直接从高维往低维写每降一维判断当前节点的dist是不是被跟新过没有出-1有出答案然后把这一层的点压进去做多源最短路就行因为是逐层更新所以保证当前答案一定最优#includebits/stdc.h#define int long long#define inf 0x3f3f3f3f3f3f3f#define GG ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define cnot coutNO\n#define cyes coutYES\n#define cans coutans\n#define pb push_back#define x0 first#define y0 second#define lc p1#define rc p1|1#define mem(a,b) memset(a,b,sizeof(a))#define sp(x) fixedsetprecision(x)#define all(v) v.begin(),v.end()#define fr(i,st,ed) for(int ist;ied;i)#define ffr(i,st,ed,dt) for(int ist;ied;idt)using namespace std;typedef pairint,stringPis;typedef pairint,intPii;const int N2e410,mod998244353,M1e610;int lowbit(int x){return x(-x);}void solve(){int n,m;cinnm;vectorvectorintg(n1);vectorintd(n1,0);vectorvectorintdj(n1);vectorintans(n1,-1);fr(i,1,m){int u,v;cinuv;g[u].pb(v);g[v].pb(u);d[v];d[u];}/*fr(i,1,n){coutd[i] ;}*/fr(i,1,n){dj[d[i]].pb(i);}vectorintdist(n1,inf);for(int in;i1;i--){if(dj[i].empty())continue;for(int x:dj[i]){if(dist[x]inf)ans[x]-1;else ans[x]dist[x];}queueintq;for(int x:dj[i]){dist[x]0;q.push(x);}while(!q.empty()){int totq.front();q.pop();for(int x:g[tot]){if(dist[x]dist[tot]1){dist[x]dist[tot]1;q.push(x);}}}}fr(i,1,n){coutans[i] ;}}signed main(){GG;int _t1;//cin_t;while(_t--){solve();}}