A题思路整体用贪心算法对每一位贪心看这个花费能不能省能和不能都用mask记录然后看下一位从头开始dfs看能不能在锁定和任意情况下省整体时间复杂度是(30^2*n),不会超时。喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵代码typedef long long ll; bool check(ll mask ,const vectorll a){ ll prev 0;//是一个数不是一位 for(ll x : a){ auto dfs [](auto self, int bit, bool is_greater) - ll{//is_greater是看前面是不是大于prev是就是1不是就是0 if(bit 0)return 0; ll v (prev bit) 1; ll c (x bit ) 1; bool locked ((~ mask bit) 1);//看有没有锁定没有锁定为0锁定为1 if( is_greater ){//如果前面已经大于prev后面可以随遍填我们填最小0 if( locked )return (1ll * c bit) | self(self, bit - 1, true);//dfs返回的也是值在锁定情况下在看这个bit是不是1 else return self(self, bit - 1, true);//没有锁定就按最小的 } else{//没有严格大于 if( locked ){//还锁定 if(c v)return -1;//这位小就g了 ll res self( self, bit - 1, c v);//如果cv就是严格大于后面就随便填等于就看情况 if(res ! -1)return (1ll * c bit)|res;//返回一个值 return -1; //到这里了说明上步没有实现res-1 } else {//没锁定 ll res self(self, bit - 1, false);//优先保证相等如果 v 0填 0递归 false如果 v 1填 1递归 false无论 v 是多少都先尝试填和 prev 相同的值。 if(res ! -1)return(1ll * v bit)|res;//成功了就不用下面了 if(v 0){//上面失败了且v 0 ll res2 self(self, bit - 1, true); if(res2 ! -1) return (1ll bit)|res2; } return -1; } } }; ll nxt dfs(dfs, 29, false); if(nxt -1)return false; prev nxt; } return true; } void solve() { ll n; cin n ; vectorll a(n); for(ll i 0; i n; i) cin a[i]; ll mask (1 30) - 1; ll ans 0; for(ll i 29 ; i 0; i--){ ll test_mask mask ^ (1 i); if(check (test_mask, a)) mask test_mask; else ans | (1 i); } cout ans \n; }G题思路主要是理解题意当n大于等于4的时候我操作员12选一个34选一个我第3次的时候在给出他前两次给第一个机甲选的配件就失败了比如他选13我在给他13他选14第3次给他14所以看种类就行了喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵代码typedef long long ll; void solve() { ll n; cin n; mapll, ll mp; ll cnt 0; for(ll i 1; i n; i){ ll a; cin a; if(mp[a]0) cnt; mp[a]; } if(cnt 4) cout NO; else cout YES; }k题思路就是大模拟先存每一行在取出大写对每一个比对先自己不变都比完在变(喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵代码typedef long long ll; void solve() { ll n; cinn; cin.ignore(); vectorstring s ; for(ll i 1; i n; i){ string a; getline(cin,a); s.push_back(a); } vectorvectorstring c(n1); vectorvectorstring d(n1); ll re 0; for(auto v: s){ stringstream cc (v); string b; while(cc b){ c[re].push_back(b); string o c[re][c[re].size()-1]; string q; q o[0]; d[re].push_back( q ); } re; } vectorvectorbool ok(n1,vectorbool(21,0)); for(ll i 0; i n; i){ for(ll j i 1 ; j n; j){ ll cnt 0; ll size_i d[i].size(); ll size_j d[j].size(); if(d[i] d[j]){ while(cntsize_j-1cntsize_i-1){ if(d[i][cnt] d[j][cnt]){ ok[i][cnt] 1; d[j][cnt] c[j][cnt]; if(c[i][cnt] ! c[j][cnt]){ break; } cnt; } else{ break; } } } } for(ll k 0; k d[i].size() - 1; k){ if(ok[i][k]) d[i][k] c[i][k]; else break; } } for(ll i 0; i n; i){ for(auto v: d[i]){ coutv; } cout\n; } }L题思路找规律喵喵喵喵喵代码#include bits/stdc.h using namespace std; typedef long long ll; signed main(){ ll n; cin n; ll ans0; for(ll i1;isqrt(n);i){ ll xi*(i1); ans(i*(n/x)max(0ll,n%x-(x-i-1))); //cout ans ans endl; } cout ans endl; }D题思路有解的充要条件1 对每个in{P1,…,Pi} ̸ {Q1,…,Qi};2 不存在y ̸x同时满足posP(y) posP(x),posQ(y) posQ(x).代码···#include bits/stdc.husing namespace std;const int maxn2e55;int n,x;int p[maxn],q[maxn],posP[maxn],posQ[maxn];int main() {ios::sync_with_stdio(false);cin.tie(0);cin n x;for (int i1;in;i) cin p[i];for (int i1;in;i) cin q[i];for (int i1;in;i) posP[p[i]]i,posQ[q[i]]i;int mx0;for (int i1;in;i){mxmax(mx,posQ[p[i]]);if (mxi){cout “NO” endl;return 0;}}int AposP[x],BposQ[x];for (int i1;in;i)if (posP[i]AposQ[i]B){cout “NO” endl;return 0;}set sp,sq;for (int iB;in;i) sp.insert(posP[q[i]]);for (int iA;in;i) sq.insert(posQ[p[i]]);vector added;while (A1||B1){auto itsp.lower_bound(A);if (it!sp.begin()) {int newA(–it);added.push_back(p[newA]);for (int inewA;iA;i) sq.insert(posQ[p[i]]);AnewA;} else {auto itsq.lower_bound(B);int newB(–it);added.push_back(q[newB]);for (int inewB;iB;i) sp.insert(posP[q[i]]);BnewB;}}reverse(added.begin(),added.end());cout “YES\n”;for (int i0;in-1;i) cout added[i] ;cout endl;return 0;}···