CSP-J2025题解
T1【拼数】找出数字后从大到小排序#includebits/stdc.husingnamespacestd;intmain(){string s;cins;string res;for(inti0;is.size();i){if(s[i]0s[i]9){ress[i];}}sort(res.begin(),res.end(),greaterchar());coutres;return0;}T2【座位】模拟即可#includebits/stdc.husingnamespacestd;intn,m;intscore;inta[110];intmain(){cinnm;for(inti1;in*m;i){cina[i];}scorea[1];sort(a1,a1n*m,greaterint());intx1,y1,k1;while(a[k]!score){if(x1){if(yn)y;elsex;}else{if(y1)y--;elsex;}k;}coutx y;return0;}T3【异或和】∵a⊕bc\because a \oplus bc∵a⊕bc∴a⊕cb\therefore a \oplus cb∴a⊕cb把数组分成若干段求前缀异或和定义数组aaa数组axa_xax的含义记录前缀异或值为xxx时上一次完成选取后的阶段编号。axta_xtaxt代表当前处在第ttt轮选取这个前缀值xxx在本轮已经出现过。在更新过程中记录ansansans#includebits/stdc.husingnamespacestd;intn,k;inta[(120)3];intarr[500003];intmain(){cinnk;ints0,ans0;a[0]1;for(inti1;in;i){cinarr[i];}for(inti1;in;i){s^arr[i];if(a[s^k]ans1){ans;}a[s]ans1;}coutans;return0;}T4【多边形】如果选择aia_iai这条边除去这个边剩下的边长度之和aia_iai。每条边可选可不选考虑01背包。最大范围不确定都存在dp5001dp_{5001}dp5001里#includebits/stdc.h#defineIOSios::sync_with_stdio(0),cin.tie(0),cout.tie(0);#defineheappriority_queue#definefxfixed#definespcssetprecision#defineFfirst#defineSsecond#definePI3.1415#pragmaGCCoptimize(3,Ofast)#definelllonglong#defineendl\n/******************************************/constintmod998244353;constintN5e310;constintM1e510;usingnamespacestd;inta[N],dp[M];intsum,ans;intmain(){freopen(polygon.in,r,stdin);freopen(polygon.out,w,stdout);IOS;#ifdefcbyyxfreopen(input.txt,r,stdin);freopen(output.txt,w,stdout);#endifintn;cinn;for(inti1;in;i){cina[i];suma[i];}summin(sum,5001);sort(a1,a1n);dp[0]1;for(inti1;in;i){for(intja[i]1;jsum;j){ansdp[j];ans%mod;}for(intjsum;j0;j--){intVmin(ja[i],5001);dp[V](dp[V]dp[j])%mod;}}coutans%mod;return0;}