没有看明白这标题配图和题目有什么关系,好像这是一张专辑的名字。 先要考虑有多少个字母总数是奇数,超过1个就直接输出impossible。每一次考虑两端点情况,如果字母不同,再进行搜索,换那个字母交换次数比较少,然后进行交换那一边的字母,直到变成回文串。
#include#include #include #include #include using namespace std;int main(){ int cas,i,j,a[27],f,cnt,len,t1,t2,k; char str[1024],c; scanf("%d",&cas); getchar(); while(cas--) { cnt=0; memset(a,0,sizeof(a)); scanf("%s",str); for(i=0;str[i]!=0;i++) a[str[i]-'a']++; f=0; for(i=0;i<26;i++) { if(a[i]%2) f++; if(f>=2) break; } if(f>=2) printf("Impossible\n"); else { len=strlen(str); for(i=0;i j-t2) { cnt+=j-t2; for(k=t2;k i;k--) str[k]=str[k-1]; } } } printf("%d\n",cnt); } getchar(); } return 0;}
版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/