hdu 1015 Safecracker(暴力枚举,注意它要求按字典序最大的,所以开始要排序)

来源:互联网 发布:潍坊seo林晟科技 编辑:程序博客网 时间:2024/04/30 05:50
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    int n,i,j,k,l,m,sum,sum1,sum2,sum3,sum4,sum5,flag;    char v,w,x,y,z;    char dest[30],turn[30];    while(1)    {        flag=0;        cin >> n >>dest;        int xx=strlen(dest);        if(n==0&&xx==3&&dest[0]=='E'&&dest[1]=='N'&&dest[2]=='D')        break;        sort(dest,dest+xx);//读题,字典序最大,所以先排好序,sort默认从小到大,有两种解决方法,1,//sort写个比较函数,第二像我一样倒着写        for(i=0;i<xx;i++)        {            turn[dest[i]-'A']=dest[i]-'A'+1;        }        for(i=xx-1;i>=0;i--)        {            v=dest[i];            for(j=xx-1;j>=0;j--)            {                w=dest[j];                for(k=xx-1;k>=0;k--)                {                    x=dest[k];                    for(l=xx-1;l>=0;l--)                    {                        y=dest[l];                        for(m=xx-1;m>=0;m--)                        {                            z=dest[m];                            sum1=turn[v-'A'];                            sum2=turn[w-'A']*turn[w-'A'];                            sum3=turn[x-'A']*turn[x-'A']*turn[x-'A'];                            sum4=turn[y-'A']*turn[y-'A']*turn[y-'A']*turn[y-'A'];                            sum5=turn[z-'A']*turn[z-'A']*turn[z-'A']*turn[z-'A']*turn[z-'A'];                            sum=sum1-sum2+sum3-sum4+sum5;                            if(v!=w&&v!=x&&v!=y&&v!=z&&w!=x&&w!=y&&w!=z&&x!=y&&x!=z&&y!=z&&sum==n)                            {                                printf("%c%c%c%c%c\n",v,w,x,y,z);                                flag=1;goto loop;                            }                        }                    }                }            }        }        loop:        if(flag==0)        printf("no solution\n");    }    return 0;}