// UVa 1209 - Wordfish
#include <string>
#include <iostream>
#include <algorithm>
#include <climits>
#include <map>
using namespace std;
map<char, int> idx;
int abs_dif(const string & st) {
int dif = INT_MAX;
for (int j = 1; j < st.length(); j++)
dif = min(dif,
(st[j] > st[j - 1] ? st[j] - st[j - 1] : st[j - 1] - st[j]));
return dif;
}
int main() {
string front;
while (cin >> front) {
string back = front, sol = front;
int largest_abs_dif = abs_dif(front);
bool hasNext = true, hasPrev = true;
for (int i = 0; i < 10; i++) {
if (hasNext) {
hasNext = next_permutation(front.begin(), front.end());
if (hasNext) {
int front_abs_dif = abs_dif(front);
if (front_abs_dif > largest_abs_dif) {
largest_abs_dif = front_abs_dif;
sol = front;
}
}
}
if (hasPrev) {
hasPrev = prev_permutation(back.begin(), back.end());
if (hasPrev) {
int back_abs_dif = abs_dif(back);
if (back_abs_dif >= largest_abs_dif) {
largest_abs_dif = back_abs_dif;
sol = back;
}
}
}
}
cout << sol << largest_abs_dif << endl;
}
return 0;
}
Monday, May 4, 2015
UVa 1209 - Wordfish
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment