#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
using namespace std;
int num, len;
char letter[15];
int flag;
int vis[15];
bool cmp(char a, char b)
{
return a > b;
}
int p(int n, int i)
{
int j, sum = 1;
for(j = 0; j < i; j++)
sum *= n;
return sum;
}
void dfs(int j, char tmp[])
{
if(j == 5)
{
if((tmp[0]-'A'+1) - p(tmp[1]-'A'+1, 2) + p(tmp[2]-'A'+1, 3) - p(tmp[3]-'A'+1, 4) + p(tmp[4]-'A'+1, 5) == num)
{
flag = 1;
tmp[5] = '\0';
cout << tmp << endl;
}
}
else
{
if(flag == 1)
return;
int i;
for(i = 0; i < len; i++)
{
if(!vis[i])
{
vis[i] = 1;
tmp[j] = letter[i];
dfs(j+1, tmp);
vis[i] = 0;
}
}
}
}
int main()
{
while(cin >> num >> letter)
{
if(num == 0 && strcmp(letter, "END") == 0)
break;
len = strlen(letter);
sort(letter, letter+len, cmp);
flag = 0;
memset(vis, 0, sizeof(vis));
char tmp[13];
dfs(0, tmp);
if(flag == 0)
cout << "no solution" << endl;
}
return 0;
}
Safecracker(HDU1015 全排列回溯)
最新推荐文章于 2022-01-24 13:48:23 发布