hdu 1015 Safecracker

来源:互联网 发布:fedora和ubuntu哪个好 编辑:程序博客网 时间:2024/05/17 01:48

链接:点击打开链接

题意:给你一个数target和一串字符串,A~Z代表1~26,让你从字符串中找出五个字母,满足v - w^2 + x^3 - y^4 + z^5 = target,答案可能有多个,输出字典序最大的那组。。

          字符串排序,然后爆搜,for过去的。。。

#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>using namespace std;char str[20];int m;bool cmp(char a,char b){    return a>b;    }int main(){    int i,len,j,k,x,y,v,w,x1,y1,z1,flag;    while(~scanf("%d %s",&m,str)){        if(m==0&&strcmp(str,"END")==0)        break;        getchar();        flag=0;        len=strlen(str);        sort(str,str+len,cmp);        for(i=0;i<len;i++){            for(j=0;j<len;j++){                if(str[i]!=str[j]){                    for(k=0;k<len;k++){                        if(str[i]!=str[j]&&str[i]!=str[k]&&str[j]!=str[k]){                            for(x=0;x<len;x++){                                if(str[i]!=str[j]&&str[i]!=str[k]&&str[i]!=str[x]&&str[j]!=str[k]&&str[j]!=str[x]&&str[k]!=str[x]){                                    for(y=0;y<len;y++){                                        if(str[i]!=str[j]&&str[i]!=str[k]&&str[i]!=str[x]&&str[i]!=str[y]&&str[j]!=str[k]&&str[j]!=str[x]&&str[j]!=str[y]&&str[k]!=str[x]&&str[k]!=str[y]&&str[x]!=str[y]){                                            v=(int)(str[i]-'A'+1);                                            w=(int)(str[j]-'A'+1);                                            x1=(int)(str[k]-'A'+1);                                            y1=(int)(str[x]-'A'+1);                                            z1=(int)(str[y]-'A'+1);                                            if(v-w*w+x1*x1*x1-y1*y1*y1*y1+z1*z1*z1*z1*z1==m){                                                printf("%c%c%c%c%c\n",str[i],str[j],str[k],str[x],str[y]);                                                flag=1;                                                }                                            }                                            if(flag==1)                                            break;                                            }                                    }                                    if(flag==1)                                  break;                                    }                            }                            if(flag==1)                           break;                            }                    }                    if(flag==1)                break;                    }                if(flag==1)                break;            }            if(flag==0)            printf("no solution\n");        }        return 0;