标签:
A题:
给出一个长度为n的字符串,操作:在这个字符串的任意位置(前后也可以)插入一个字符,使之成为一个回文串,
而且,即使这个字符串本身就是回文串,你也必须插入一个字符。
若无法达成目的,输出"NA"
由于题意n<=10,所以直接暴力。
1.看本身是否是回文串
2.若本身不是,则暴力:
从前到后每次去掉这个字符串的一个字符,看新形成的字符串是否为回文串,若是则在这个去掉的字符的相应位置插入这个字符,还是回文串,达成目的。
若不是,则无法达成目的,输出“NA”
我这段代码的问题:s下标从0开始,新形成的字符串下标从1开始,导致很紊乱。本来想改的,好困啊,睡觉了。
1 #include<cstdio> 2 #include<cstring> 3 char s[11]; 4 int main() 5 { 6 while(scanf("%s",&s)!=EOF){ 7 int len=strlen(s); 8 bool cnt=true; 9 for(int i=1;i<=len/2;i++) 10 if(s[i-1]!=s[len-i]){ 11 cnt=false; 12 break; 13 } 14 if(cnt){ 15 for(int i=1;i<=len/2;i++) 16 printf("%c",s[i-1]); 17 printf("%c",s[len/2]); 18 for(int i=len/2+1;i<=len;i++) 19 printf("%c",s[i-1]); 20 printf("\n"); 21 continue; 22 } 23 for(int i=1;i<=len;i++){ 24 char t[11]; 25 int j=0,k=1; 26 while(j<len){ 27 if(j==i-1) 28 j++; 29 else{ 30 t[k++]=s[j]; 31 j++; 32 } 33 } 34 bool flag=true; 35 for(int l=1;l<k;l++){ 36 if(t[l]!=t[k-l]){ 37 flag=false; 38 break; 39 } 40 } 41 if(flag){ 42 i--; 43 if(i<=len/2){ 44 for(int l=0;l<len-i;l++) 45 printf("%c",s[l]); 46 printf("%c",s[i]); 47 for(int l=len-i;l<len;l++) 48 printf("%c",s[l]); 49 printf("\n"); 50 goto loop; 51 } 52 else{ 53 for(int l=0;l<len-i-1;l++) 54 printf("%c",s[l]); 55 printf("%c",s[i]); 56 for(int l=len-i-1;l<len;l++) 57 printf("%c",s[l]); 58 printf("\n"); 59 goto loop; 60 } 61 } 62 } 63 printf("NA\n"); 64 loop: ; 65 } 66 return 0; 67 }
Codeforces Round #286 (Div. 2)
标签:
原文地址:http://www.cnblogs.com/-maybe/p/4385781.html