标签:des style blog http color java os io strong
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3433 Accepted Submission(s): 1334
1 #include<cstring> 2 #include<cstdio> 3 #include<map> 4 using namespace std; 5 const int maxn=100005; 6 char stdch[28]; //给出的暗文标准版 7 map<char,int>str; 8 char text[maxn]; 9 char tes[maxn]; 10 int next[maxn]; 11 void getnext(int len){ 12 int i=0,j=-1; 13 //memset(next,0,sizeof(next)); 14 next[0]=-1; 15 while(i<len){ 16 if(j==-1||tes[i]==tes[j]){ 17 i++; 18 j++; 19 // next[i]=j; 优化一下 20 if(tes[i]!=tes[j]) next[i]=j; 21 else next[i]=next[j]; 22 } 23 else j=next[j]; 24 } 25 } 26 void kmp(int len){ 27 28 //前半部是暗纹,后半部是明文,所以起点:i 29 //tes是经过翻转之后的暗纹,也就是明文 30 getnext(len); 31 int len1=len; 32 if(len1&1)len1++; //这里需要特别注意因为暗纹要不明文长,明文可以又缺失 33 int i=len1>>1,j=0; 34 while(i<len&&j<len){ 35 if(j==-1||text[i]==tes[j]){ 36 i++; 37 j++; 38 } 39 else j=next[j]; 40 } 41 printf("%s",text); 42 if(j*2!=len) { 43 for(int i=j;i+j<len;i++) 44 printf("%c",tes[i]); 45 } 46 puts(""); 47 } 48 int main(){ 49 int test; 50 //freopen("test.in","r",stdin); 51 scanf("%d",&test); 52 while(test--) { 53 54 if(!str.empty()) str.clear(); 55 scanf("%s",stdch); 56 for(int i=0;i<26;i++) 57 str[stdch[i]]=i; 58 scanf("%s",text); 59 int tslen=strlen(text); 60 for(int i=0;i<tslen;i++){ 61 tes[i]=str[text[i]]+‘a‘; //经过两次旋转 62 } 63 kmp(tslen); 64 } 65 return 0; 66 }
hdu------(4300)Clairewd’s message(kmp)
标签:des style blog http color java os io strong
原文地址:http://www.cnblogs.com/gongxijun/p/3932498.html