题目信息:http://acm.hdu.edu.cn/showproblem.php?pid=1015
代码如下:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#define N 10005
#include<algorithm>
using namespace std;
int v[N],target;
char ch[N],m_ch[N],s[N];
int is(char v,char w,char x,char y,char z ) {
if((int)(v-'A'+1)-(int)pow((int)(w-'A'+1),2)+(int)pow((int)(x-'A'+1),3)-(int)pow((int)(y-'A'+1),4)+(int)pow((int)(z-'A'+1),5)==target)
return 1;
return 0;
}
void dfs(int cur) {
if(cur==5) {
if(is(ch[0],ch[1],ch[2],ch[3],ch[4])&&strcmp(ch,m_ch)>0)
strcpy(m_ch,ch);
} else {
for(int i=0; i<strlen(s); i++) {
if(v[s[i]-'A']==0) {
ch[cur]=s[i];
v[s[i]-'A']=1;
dfs(cur+1);
v[s[i]-'A']=0;
}
}
}
}
int main() {
while(scanf("%d%s",&target,s)) {
if(target==0&&strcmp(s,"END")==0)
break;
memset(v,0,sizeof(v));
memset(ch,'\0',sizeof(ch));
memset(m_ch,'\0',sizeof(m_ch));
sort(s,s+strlen(s));
dfs(0);
if(strlen(m_ch)==0) printf("no solution\n");
else
printf("%s\n",m_ch);
}
}