📄 pku1248.cpp
字号:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
bool cp(char a, char b)
{
return a > b;
}
int ToNum(char x)
{
return x - 'A' + 1;
}
char ToChar(int x)
{
return x + 'A' - 1;
}
char s[50];
int val[27][6];
int ls, k;
bool visit[27], found;
int ans[5];
void pre()
{
int i, j;
for (i = 0; i < 27; i++)
{
val[i][0] = -1;
}
for (i = 0; i < 27; i++)
{
for (j = 1; j < 6; j++)
{
val[i][j] = val[i][j - 1] * i * (-1);
}
}
}
bool Test()
{
int i, res;
for (i = 0, res = 0; i < 5; i++)
{
res += val[ans[i]][i + 1];
}
if (res == k)
{
for (i = 0; i < 5; i++)printf("%c", ToChar(ans[i]));
printf("\n");
}
return res == k;
}
void search(int dep)
{
int i;
if (found)
{
return;
}
if (dep == 5)
{
if (Test())
{
found = 1;
}
return;
}
for (i = 0; i < ls; i++)
{
if (visit[i] == 0)
{
visit[i] = 1;
ans[dep] = ToNum(s[i]);
search(dep + 1);
visit[i] = 0;
}
}
}
int main()
{
pre();
while (scanf("%d%s", &k, s) != -1 && k != 0)
{
ls = strlen(s);
sort(s, s + ls, cp);
found = 0;
memset(visit, 0, sizeof(visit));
search(0);
if (!found)
{
printf("no solution\n");
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -