Problem:
A - D's Ambition / Dのやぼう
Story
あいずにゃんは若ヶ松高校のプログラミングコンテスト部、通称ぷろこん部に所属する2年生である。かわいい。Dのひとは天使のごとくかわいいあいずにゃんにぞっこんであり、隙あらばぺろぺろしようと画策する変態である。その愛は猟奇的であり、あいずにゃんを自分色に染めようと、"AIZUNYAN"という文字列を見る度"AIDUNYAN"に書き換えてしまう。さらにあいずにゃんを自分だけのものにするため、他の人に気づかれないようにその文字列をバラバラに並べ替えてしまう。プロコンの名門・律命館大学中等部卒のエリート競技プログラマであり、ぷろこん部の部長であるりっつちゃんは、あいずにゃんをDのひとの魔の手から救うため、Dのひとが改変した文字列をすべて復元することにした。
Problem
英大文字のみからなる文字列
Z
がある。文字列
Z
中に現れるすべての部分文字列"AIZUNYAN"に対し、個別に"AIDUNYAN"の任意のアナグラムを生成し、置き換えることで得られた文字列を
D
とする。ここで、文字列
S
のアナグラムとは、
S
に現れる文字を並び替えて得られる文字列のことをいう。文字列
D
が入力として与えられるので、文字列
Z
を復元せよ。 ただし、文字列
D
に含まれる"AIDUNYAN"のアナグラムはすべて、"AIZUNYAN"から置き換えられたもののみであると仮定してよい。また、
D
中の任意の文字
D_i
について、
D_i
を含み、かつ"AIDUNYAN"のアナグラムである部分文字列は高々1つしかないと仮定してよい。
Input
D
入力は
1
行で与えられ、英大文字のみからなる文字列
D
を含む。文字列
D
の長さ|
D
|は
1 \leq |D| \leq 10^3
を満たす。
Output
D
を復元した文字列
Z
を
1
行に出力せよ。行の最後では必ず改行を行うこと。
Sample Input 1
AIDUNYAN
Sample Output 1
AIZUNYAN
Dの魔の手から救うことができた。
Sample Input 2
ZDD
Sample Output 2
ZDD
文字列長が
8
文字未満であったり、"AIDUNYAN"のアナグラムを含まないこともある。
Sample Input 3
AADINNUYHAMAJIDETENSHIDAKARANYANAIDUPEROPEROSHITAI
Sample Output 3
AIZUNYANHAMAJIDETENSHIDAKARAAIZUNYANPEROPEROSHITAI
2
箇所以上含まれている場合はすべて復元する。ぺろぺろ。
Sample Input 4
NYANAIDUAIDU
Sample Output 4
AIZUNYANAIDU
復元後の文字列
Z
に"AIDUNYAN"のアナグラムが現れる場合もあるが、復元前の文字列
D
においてアナグラムでない部分ならば変更しないことに注意せよ。

Submitted solutions:

code_snippet: #include <bits/stdc++.h>

using namespace std;

int main()
{
  string D;
  string S = "AIDUNYAN";
  string R = "AIZUNYAN";
  int len;
  cin >> D;
  len = D.size();
  D += "*****";
  sort(S.begin(), S.end());
  string ans = D;
  do{
    for(int i = 0; i <= D.size() - S.size(); i++){
      if(D.substr(i, S.size()) == S){
	for(int j = 0; j < S.size(); j++){
	  ans[i + j] = R[j];
	}
      }
    }
  }while(next_permutation(S.begin(), S.end()));
  cout << ans.substr(0, len) << endl;
  return 0;
}
accuracy: 1
time_ms: 470
memory_kb: 1200
final_rank: 1

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <set>
#include <map>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <istream>
#include <sstream>
#include <iomanip>
#include <iterator>
#include <climits>
using namespace std;

typedef ostringstream OSS;
typedef istringstream ISS;

typedef vector<int> VI;
typedef vector< VI > VVI;

typedef long long LL;

typedef pair<int, int> PII;
typedef vector<PII> VPII;

#define X first
#define Y second

int main(void) {
	string s1("AIDUNYAN"), s2("AIZUNYAN");
	string D;
	cin >> D;

	for (int i = 0; i < (int)(D.size() - s1.size() + 1); i++) {
		sort(s1.begin(), s1.end());
		do {
			if (equal(s1.begin(), s1.end(), D.substr(i, s1.size()).begin())) {
				D.replace(i, s2.size(), s2);
				i += s2.size() - 1;
				break;
			}
		} while (next_permutation(s1.begin(), s1.end()));
	}

	cout << D << endl;

	return 0;
}
accuracy: 1
time_ms: 540
memory_kb: 1212
final_rank: 3

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <set>
#include <map>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <istream>
#include <sstream>
#include <iomanip>
#include <iterator>
#include <climits>
using namespace std;

typedef ostringstream OSS;
typedef istringstream ISS;

typedef vector<int> VI;
typedef vector< VI > VVI;

typedef long long LL;

typedef pair<int, int> PII;
typedef vector<PII> VPII;

#define X first
#define Y second

int main(void) {
	string s1("AIDUNYAN"), s2("AIZUNYAN");
	string D;
	cin >> D;

	for (int i = 0; i < (int)(D.size() - s1.size() + 1); i++) {
		sort(s1.begin(), s1.end());
		do {
			if (equal(s1.begin(), s1.end(), D.substr(i, s1.size()).begin())) {
				D.replace(i, s2.size(), s2);
				i += s2.size();
				break;
			}
		} while (next_permutation(s1.begin(), s1.end()));
	}

	cout << D << endl;

	return 0;
}
accuracy: 0.06153846153846154
time_ms: 270
memory_kb: 1208
final_rank: 5

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <set>
#include <map>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <istream>
#include <sstream>
#include <iomanip>
#include <iterator>
#include <climits>
using namespace std;

typedef ostringstream OSS;
typedef istringstream ISS;

typedef vector<int> VI;
typedef vector< VI > VVI;

typedef long long LL;

typedef pair<int, int> PII;
typedef vector<PII> VPII;

#define X first
#define Y second

int main(void) {
	string s1("AIDUNYAN"), s2("AIZUNYAN");
	string D;
	cin >> D;

	for (int i = 0; i < (int)(D.size() - s1.size() + 1); i++) {
		sort(s1.begin(), s1.end());
		do {
			if (equal(s1.begin(), s1.end(), D.begin() + i)) {
				D.replace(i, s2.size(), s2);
				i += s2.size();
				break;
			}
		} while (next_permutation(s1.begin(), s1.end()));
	}

	cout << D << endl;

	return 0;
}
accuracy: 0.06153846153846154
time_ms: 70
memory_kb: 1208
final_rank: 4

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <set>
#include <map>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <istream>
#include <sstream>
#include <iomanip>
#include <iterator>
#include <climits>
using namespace std;

typedef ostringstream OSS;
typedef istringstream ISS;

typedef vector<int> VI;
typedef vector< VI > VVI;

typedef long long LL;

typedef pair<int, int> PII;
typedef vector<PII> VPII;

#define X first
#define Y second

int main(void) {
	string s1("AIDUNYAN"), s2("AIZUNYAN");
	string D;
	cin >> D;

	for (int i = 0; i < (int)(D.size() - s1.size() + 1); i++) {
		sort(s1.begin(), s1.end());
		do {
			if (equal(s1.begin(), s1.end(), D.begin())) {
				D.replace(i, s2.size(), s2);
				i += s2.size();
				break;
			}
		} while (next_permutation(s1.begin(), s1.end()));
	}

	cout << D << endl;

	return 0;
}
accuracy: 0.03076923076923077
time_ms: 10
memory_kb: 1192
final_rank: 6

code_snippet: #include <iostream>
#include <iomanip>
#include <sstream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <functional>
#include <iterator>
#include <limits>
#include <numeric>
#include <utility>
#include <cmath>

using namespace std; using namespace placeholders;

// using LL = long long; using ULL = unsigned long long;
// using VI = vector<int>; using VVI = vector<VI>;
// using VS = vector<string>;
// using SS = stringstream;
// using PII = pair<int,int>; using VPII = vector< pair<int,int> >;
// template < typename T = int > using VT = vector<T>;
// template < typename T = int > using VVT = VT< VT<T> >;
// template < typename T = int > using LIM = numeric_limits<T>;

// template < typename T > inline void input_n( VT< T > &out ) { copy_n( istream_iterator< T >( cin ), out.size(), out.begin() ); };
// template < typename T > inline T fromString( const string &s ) { T res; istringstream iss( s ); iss >> res; return res; };
// template < typename T > inline string toString( const T &a ) { ostringstream oss; oss << a; return oss.str(); };

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )
#define FOR( e, c ) for ( auto &e : c )
#define ALL( c ) (c).begin(), (c).end()
#define AALL( a, t ) (t*)a, (t*)a + sizeof( a ) / sizeof( t )
#define DRANGE( c, p ) (c).begin(), (c).begin() + p, (c).end()

#define PB( n ) push_back( n )
#define EM( n ) emplace( n )
#define EB( n ) emplace_back( n )
#define MP( a, b ) make_pair( ( a ), ( b ) )
#define EXIST( c, e ) ( (c).find( e ) != (c).end() )

#define fst first
#define snd second

#define DUMP( x ) cerr << #x << " = " << ( x ) << endl

const string AIDUNYAN = "AIDUNYAN";
const string AIZUNYAN = "AIZUNYAN";

bool nyan( string s )
{
	sort( ALL( s ) );
	do
	{
		if ( equal( ALL( s ), AIDUNYAN.begin() ) )
		{
			return true;
		}
	}
	while ( next_permutation( ALL( s ) ) );

	return false;
}

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	string D;
	cin >> D;

	const int L = D.size();

	REP( i, 0, L )
	{
		if ( i + 8 <= L && nyan( D.substr( i, 8 ) ) )
		{
			copy( ALL( AIZUNYAN ), D.begin() + i );
			i += 7;
		}
	}

	cout << D << endl;

	return 0;
}
accuracy: 1
time_ms: 280
memory_kb: 1212
final_rank: 2