现在的位置: 首页 > 综合 > 正文

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

2018年04月26日 ⁄ 综合 ⁄ 共 989字 ⁄ 字号 评论关闭
#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;
}

抱歉!评论已关闭.