打卡信奥刷题(3205)用C++实现信奥题 P8153 「PMOI-5」送分题/Yet Another Easy Strings Merging
P8153 「PMOI-5」送分题/Yet Another Easy Strings Merging题目背景本题征集假做法和 hack 数据如果您用假做法 AC 了欢迎私信出题人提供 hack。信息可能有冗余。——command_block 《考前小贴士》djy 在看 P8001看错题了很自闭然后就有了这个题。题目描述给定nnn个 01 串每次你可以从某个串开头移除一个字符并把剩下的字符串加入一个新串SSS的末尾。最大化SSS中相邻两个字符相同的对数。例如你有1010 111两个串如果你移除第一个串的第一个字符则010被加入到SSS中。串可以重复使用。输入格式第一行一个正整数nnn表示串的个数。接下来nnn行每行一个 01 字符串。输出格式一行一个整数表示答案。输入输出样例 #1输入 #11 1100输出 #14输入输出样例 #2输入 #25 10010 10000 01110 111111 000000输出 #248说明/提示【样例解释】依次取走第一个字符SSS的变化过程为100-10000-100000答案为444。【数据范围】记∣s∣|s|∣s∣为字符串sss的长度sis_isi为第iii个字符串 。本题采用捆绑测试。Subtask 130 ptsn,∑∣si∣≤11n,\sum|s_i|\le 11n,∑∣si∣≤11Subtask 230 ptsn,∑∣si∣≤103n,\sum|s_i|\le 10^3n,∑∣si∣≤103Subtask 330 ptsn,∑∣si∣≤105n,\sum|s_i|\le 10^5n,∑∣si∣≤105Subtask 410 pts无特殊限制。对于100%100\%100%的数据1≤n≤1061\le n\le 10^61≤n≤106n≤∑∣si∣≤106n\le \sum |s_i|\le 10^6n≤∑∣si∣≤106∀i∈[1,n]\forall i\in [1,n]∀i∈[1,n]∣si∣≥1|s_i|\ge 1∣si∣≥1。C实现#includebits/stdc.h#defineilinline#definereregister#defineOrzputs(Szt Lps Fjh AK IOI!);#defineIOSios::sync_with_stdio(false),cin.tie(0),cout.tie(0);usingnamespacestd;constintINF1e97,mod1e97;constintmaxn2e510,MAXN3e310,N1e610;typedeflonglongLL;string s[N];LL ans,n;intL[N],sum0;boolf1,f2;intsum1,sum2,sum3,sum4;signedmain(){IOS cinn;for(reinti1;in;i)cins[i],s[i]$s[i],L[i]s[i].length()-1;for(reinti1;in;i)sumL[i];if(!(sum^n))returnprintf(0),0;for(reinti1;in;i){intcnt0;for(reintjL[i]-1;j2;j--){if(s[i][j]s[i][j1])cnt;anscnt;}}for(reinti1;in;i){if(L[i]1)continue;// 长度为 1 的串删完就成了空串没用if(s[i][L[i]]0)sum1L[i]-1;elsesum2L[i]-1;for(reintj2;jL[i];j){if(s[i][j]0)sum3;elsesum4;}if(s[i][2]0)f1true;elseif(s[i][2]1)f2true;}if(f1f2)ansmax(min(sum3,sum1)min(sum4-1,sum2),min(sum3-1,sum1)min(sum4,sum2));elseif(f1)ansmin(sum3-1,sum1)min(sum4,sum2);elseansmin(sum3,sum1)min(sum4-1,sum2);coutansendl;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容