HDU-1015(dfs)Safecracker

题目信息: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);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39564498/article/details/81610680