HDOJ 1015 Safecracker
Safecracker
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
int OK=1;
int cmp(const void* a,const void * b)
{
return *(char*)b-*(char *)a;
}
void dfs(int cur,int n,int target,int* a,int* b,int* vis)
{
if(OK==1)
{
if(cur==5)
{
int t=( int)(b[0]-b[1]*b[1]+pow((double)b[2],3.)-pow((double)b[3],4.)+pow((double)b[4],5.)+0.5);//防止误差
// cout<<t<<endl;//v - w^2 + x^3 - y^4 + z^5 = target
if(t==target)
{
for(int i=0;i<5;i++)
{
cout<<(char)(b-1+'A');
}
cout<<endl;
OK=0;
}
}
else
{
for(int j=0;j<n;j++)
{
if(vis[j]==0)
{
vis[j]=1;
b[cur]=a[j];
dfs(cur+1,n,target,a,b,vis);
vis[j]=0;
}
}
}
}
else return ;
}
int main()
{
int n;
char str[50];
while(cin>>n>>str&&n)
{
OK=1;
int a[50];
int b[50];
int vis[50]={0};
int len=strlen(str);
qsort(str,len,sizeof(str[0]),cmp);
for(int i=0;i<len;i++)
{
a=(str-'A')+1;
//cout<<a<<" ";
}
dfs(0,len,n,a,b,vis);
if(OK==1)
cout<<"no solution"<<endl;
}
return 0;
}