1. 程式人生 > >水題 第六站 HDU Safecracker

水題 第六站 HDU Safecracker

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <map>
using namespace std;
map<char, int>mm;
int num[1001],vis[1001];
int ta, len;
char m_ch[1001],ch[1001],cha[1001];
void fun()
{
    char c='A';
    for(int i=0; i<26; i++)
    {
        mm[c++]=i+1;
        printf("%d\n",c);
    }
}

int is(int v,int w,int x,int y,int z,int tar)
{
    if(v-w*w+x*x*x-y*y*y*y+z*z*z*z*z==tar)
        return 1;
    else
        return 0;
}

void dfs(int cur)
{
    if(cur==5)
    {
        if(is(num[0],num[1],num[2],num[3],num[4],ta)&&strcmp(ch,m_ch)>0)
           strcpy(m_ch,ch);
            printf("%s\n",m_ch);
    }
    else
    {
        for(int i=0; i<len; i++)
        {
            if(vis[mm[cha[i]]]==0)
            {
                num[cur]=mm[cha[i]];
                ch[cur]=cha[i];
                vis[mm[cha[i]]]=1;
                dfs(cur+1);
                vis[num[cha[i]]]=0;
            }
        }
    }
}
int main ()
{
    fun();
    while(~scanf("%d",&ta))
    {
        scanf("%s",cha);
        if(ta==0&&strcmp(cha,"END")==0)
            break;
        memset(num,0,sizeof(num));
        memset(m_ch,'\0',sizeof(m_ch));
        memset(ch,'\0',sizeof(ch));
        memset(vis,0,sizeof(vis));
        len=strlen(cha);
        sort(cha,cha+len);
        printf("%s\n",cha);
        dfs(0);
        if(strlen(m_ch)==0) printf("no solution\n");
        else printf("%s\n",m_ch);
        //printf("%d",pow(,2));
    }
    return 0;
}

不知道為什麼結果就是不對,我也是服= =