10716 - Evil Straw Warts Live

描述:把所给的字符串变换成回文,并统计其变换次数,如果不能,则输出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;

}


你可能感兴趣的:(live)