C题面思路暴力预处理出来所有合法起点 前缀和查询|T|10|S|4e54e5*104e6 This is acceptable…AC_Code注意所给[l,r]是否够长不够长即使有合法起点在那也构不出 t 来voidsolve(){intq;string s,t;cinqst;intns.size(),mt.size();s s,t t;vectorintok(n1,0);for(inti1;in-m1;i){boolf1;for(intj1;jm;j){if(s[ij-1]!t[j]){f0;break;}}if(f)ok[i]1;}vectorintpre(n1,0);for(inti1;in;i)pre[i]pre[i-1]ok[i];while(q--){intl,r;cinlr;//得够长啊if(r-l1m){coutNo\n;continue;}if(pre[r-m1]-pre[l-1]0)coutYes\n;elsecoutNo\n;}return;}D题面思路赛时想到的点1.方块儿最终的颜色由最后一次变色所决定2.cnt[x]为偶的时候才会被 op2 染色但是没处理对。码力Weak…核心就是找到方块最后一次染色的时刻存下来这个颜色作为它的最终态把数组开好记录好时间、位置信息la1[x]: x最后一次op1的位置cnt[x]:x经历过的op1的次数la2: 最后一次op2的位置co[x]: x的最终颜色AC_Code(用异或运算记录奇偶状态0-偶1-奇更优雅 避免犯蠢 QwQvoidsolve(){intn,q;cinnq;vectorintla1(n1,0);vectorintcnt(n1,0);charcola;intla20;vectorcharco(n1,a);for(inti1;iq;i){intop;cinop;if(op1){intx;cinx;//最后一次偶转奇//Problem 1!cnt[x]%2 (!cnt[x]) %2!!!!!if(!cnt[x]la1[x]la2)co[x]col;//异或用起来代码优雅起来cnt[x]^1;la1[x]i;}else{cincol;la2i;}}//法一// for(int i1;in;i)// {// //最后有瓷砖先前 co[i]就已经维护好了// if(cnt[i])coutco[i];// //最后没瓷砖// else// {// //没瓷砖的状态在 la2之前被最后一次 op2染色// if(la1[i]la2)coutcol;// //没瓷砖的状态在 la2之后不受最后一次 op2影响// else coutco[i];// }// }//法二for(inti1;in;i){if(!cnt[i]la1[i]la2)co[i]col;}for(inti1;in;i)coutco[i];cout\n;return;}
阅读完成 · 觉得有帮助?