[cpp]
描述:把所給的字符串變換成回文,並統計其變換次數,如果不能,則輸出Impossible
#include <cstdio>
#include <cstdlib>
#include <cstring>
int main()
{
// freopen("a.txt","r",stdin);
int n,num[30];
scanf("%d",&n);
while(n--)
{
char s[110];
memset(num,0,sizeof(num));
scanf("%s",s);
int len=strlen(s),flag=0,m,count=0;
for(int i=0; i<len; i++) num[s[i]-'a']++;
for(int i=0; i<26; i++)
if(num[i]%2==1) flag++;
if(flag>=2)
{
printf("Impossible\n");
continue;
}
m=len-1;
for(int i=0; i<len/2; i++)
{
int j=m;
for(; j>i; j--) if(s[j]==s[i]) break;
if(j==i)
{
int temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
i--;
count++;
continue;
}
count+=m-j;
for(int k=j+1; k<=m; k++) s[k-1]=s[k];
s[m--]=s[i];
}
printf("%d\n",count);
}
return 0;
}
描述:把所給的字符串變換成回文,並統計其變換次數,如果不能,則輸出Impossible
#include <cstdio>
#include <cstdlib>
#include <cstring>
int main()
{
// freopen("a.txt","r",stdin);
int n,num[30];
scanf("%d",&n);
while(n--)
{
char s[110];
memset(num,0,sizeof(num));
scanf("%s",s);
int len=strlen(s),flag=0,m,count=0;
for(int i=0; i<len; i++) num[s[i]-'a']++;
for(int i=0; i<26; i++)
if(num[i]%2==1) flag++;
if(flag>=2)
{
printf("Impossible\n");
continue;
}
m=len-1;
for(int i=0; i<len/2; i++)
{
int j=m;
for(; j>i; j--) if(s[j]==s[i]) break;
if(j==i)
{
int temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
i--;
count++;
continue;
}
count+=m-j;
for(int k=j+1; k<=m; k++) s[k-1]=s[k];
s[m--]=s[i];
}
printf("%d\n",count);
}
return 0;
}