Statistic | Submit | Discuss | Note
这题估计是数据弱了。。。五重循环不超时。
#include
#include
#include
#include
using namespace std;
char s[15];
bool vis[15], tag;
int t, len;
int Cal(int y, int w, int v, int x, int z)
{
v -= 64, w -= 64, x -= 64, y -= 64, z -= 64;
return (v - w*w + x*x*x - y*y*y*y + z*z*z*z*z);
}
int main()
{
while(scanf("%d %s", &t, s))
{
len = strlen(s);
if(t == 0 && !strcmp(s,"END")) break;
tag = true;
//将可选序列按升序排列
for(int i = 1; i < len && tag; i++)
{
for(int j = 0, tag = false; j < len - i; j++)
{
if(s[j] < s[j + 1])
{
swap(s[j], s[j + 1]);
tag = true;
}
}
}
for(int i = 0; i < len; i++) vis[i] = false;
//若target在值域之外,no solution
if(Cal(s[0], s[1], s[len - 3], s[len - 2], s[len - 1]) > t || Cal(s[len - 1], s[len - 2], s[2], s[1], s[0]) < t)
puts("no solution");
else
{
int a, b, c, d, e;
tag = false;
for(a = 0; a < len; a++)
{
vis[a] = true;
for(b = 0; b < len; b++)
{
if(!vis[b])
{
vis[b] = true;
for(c = 0; c < len; c++)
{
if(!vis[c])
{
vis[c] = true;
for(d = 0; d < len; d++)
{
if(!vis[d])
{
vis[d] = true;
for(e = 0; e < len; e++)
if(!vis[e] && Cal(s[d], s[b], s[a], s[c], s[e]) == t)
{
tag = true;
goto end;
}
vis[d] = false;
}
}
vis[c] = false;
}
}
vis[b] = false;
}
}
vis[a] = false;
}
end:
if(!tag) puts("no solution");
else printf("%c%c%c%c%c\n", s[a], s[b], s[c], s[d], s[e]);
}
}
return 0;
}