250
string itoa(int n)
{
ostringstream oss;
oss << n;
return oss.str();
}
class Chessboard {
public:
string changeNotation(string cell) {
map<string, string> conv;
int cnt = 0;
for(char n='1'; n<='8'; ++n){
for(char c='a'; c<='h'; ++c){
string s;
string t = itoa(++cnt);
s += c;
s += n;
conv[s] = t;
conv[t] = s;
}
}
return conv[cell];
}
};
500
int conv(char c)
{
if( c == ' ' )return 0;
return c - 'a' + 1;
}
char rev(int n)
{
if( n == 0 )return ' ';
return 'a' + n - 1;
}
string solve(string s, string p)
{
string t;
for(int i=0; i<s.size(); ++i){
int n = conv( s[i] ) + conv( p[i%3] );
t += rev( (n + 27) % 27 );
}
return t;
}
bool valid(string s)
{
istringstream iss(s);
string t;
int sum = 0;
while( iss >> t ){
if( t.size() == 1 || 8 < t.size() )return false;
if( sum ) ++sum;
sum += t.size();
bool flg = false;
for(int i=0; i<t.size(); ++i){
if( t[i] == 'a' || t[i] == 'i' || t[i] == 'u' || t[i] == 'e' || t[i] == 'o' ){
flg = true;
break;
}
}
if( !flg )return false;
}
return sum == s.size();
}
class SimpleRotationDecoder {
public:
string decode(string text) {
for(char a='a'; a<='z'; ++a){
for(char b='a'; b<='z'; ++b){
for(char c='a'; c<='z'; ++c){
string s = "";
s += a;
s += b;
s += c;
string t = solve(text, s);
if( valid(t) )return t;
}
}
}
return "";
}
};
1000
class QuantumAlchemy {
public:
int minSteps(string ini, vector <string> rea) {
map<char, int> elem;
for(int i=0; i<ini.size(); ++i){
++elem[ ini[i] ];
}
map<char, string> mat;
for(int i=0; i<rea.size(); ++i){
string s = rea[i];
reverse( s.begin(), s.end() );
char c = s[0];
string t = s.substr( 3 );
mat[ c ] = t;
}
map<char, int> needed;
int ret = 0;
needed['X'] = 1;
while( ret < 10000 ){
for(char c='A'; c<='Z'; ++c){
if( needed[c] > elem[c] && mat.find(c) == mat.end() ){
return -1;
}
}
bool flg = true;
for(char c='A'; c<='Z'; ++c){
if( needed[c] > elem[c] ){
++ret;
string s = mat[c];
--needed[c];
for(int i=0; i<s.size(); ++i){
++needed[ s[i] ];
}
flg = false;
break;
}
}
if( flg ) return ret;
}
return -1;
}
};
0 件のコメント :
コメントを投稿