标签:can sed next数组 图片 onclick 16px span %s 技术
CF1137B Camp Schedule
题意:s和t均由0和1构成。要求重组s串,使得t在s中出现的次数最多。
#include <iostream> #include <cstring> using namespace std; const int N=500000+10; int Next[N]; char s[N],t[N]; void GET_next(char* t, int Next[]) { int j = 0; int len=strlen(t+1); for(int i = 2; i <= len; i++){ while(j && t[j+1] != t[i]){ j = Next[j]; } if(t[j+1] == t[i]) j++; Next[i] = j; } } int main() { scanf("%s",s+1); scanf("%s",t+1); int l1=strlen(s+1); int l2=strlen(t+1); int s0=0,s1=0; for (int i=1;i<=l1;i++){ if (s[i]==‘0‘) s0++; else s1++; } GET_next(t,Next); int j=1; for (int i=1;i<=l1;i++){ if (t[j]==‘0‘){ if (s0) { cout<<0;s0--; } else break; } else{ if (s1) { cout<<1;s1--; } else break; } j++; if (j==l2+1) j=Next[l2]+1; } if (s0) for (int i=1;i<=s0;i++) cout<<0; if (s1) for (int i=1;i<=s1;i++) cout<<1; return 0; }
标签:can sed next数组 图片 onclick 16px span %s 技术
原文地址:https://www.cnblogs.com/chillilly/p/12488523.html