您的位置:首页 > Web前端

poj 1248 Safecracker

2012-06-05 13:53 225 查看
//5个for循环,直接暴力就可以过了,对一些重复的字符不进行选择!
#include <iostream>
#include <string>
#include <map>
#include <cmath>
using namespace std;

map<char, int> m;

int main()
{
int target, i, j, k, l, n, len, temp;
string str, ans, tmp;
bool flag;
m['A'] = 1, m['B'] = 2, m['C'] = 3, m['D'] = 4, m['E'] = 5,
m['F'] = 6, m['G'] = 7, m['H'] = 8, m['I'] = 9, m['J'] =10,
m['K'] = 11, m['L'] = 12, m['M'] = 13, m['N'] = 14, m['O'] = 15,
m['P'] = 16, m['Q'] = 17, m['R'] = 18, m['S'] = 19, m['T'] = 20,
m['U'] = 21, m['V'] = 22, m['W'] = 23, m['X'] = 24, m['Y'] = 25, m['Z'] = 26;
while (cin >> target >> str)
{
if (target == 0 && str == "END")  break;
len = str.length();
tmp.clear();
ans.clear();
flag = false;
for (i = 0;i < len; i++)
{
for (j = 0; j < len; j++)
{
if (i == j) continue;
for (k = 0; k < len; k++)
{
if (k == i || k == j)  continue;
for (l = 0; l < len; l++)
{
if (l == k || l == j || l == i) continue;
for (n = 0; n < len; n++)
{
if (n == l || n == k || n == j || n == i)  continue;
temp = m[str[i]] - pow(double (m[str[j]]), 2) + pow(double (m[str[k]]), 3) - pow(double (m[str[l]]), 4) + pow(double(m[str
]), 5);
if (temp == target)
{
tmp.clear();
tmp.push_back(str[i]);
tmp.push_back(str[j]);
tmp.push_back(str[k]);
tmp.push_back(str[l]);
tmp.push_back(str
);
if (tmp > ans)
{
ans = tmp;
flag = true;
}
}
}
}
}
}
}
if (flag)
cout << ans << endl;
else
cout << "no solution" << endl;
}

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: