結果

問題 No.197 手品
コンテスト
ユーザー ゴリポン先生
提出日時 2026-01-30 21:54:00
言語 D
(dmd 2.111.0)
結果
WA  
実行時間 -
コード長 1,231 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,243 ms
コンパイル使用メモリ 172,484 KB
実行使用メモリ 8,096 KB
最終ジャッジ日時 2026-01-30 21:54:07
合計ジャッジ時間 4,909 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 29 WA * 14
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

module main;
// 幅優先探索
import std;

// C++ の tie
auto tie(StoreElements...)(ref StoreElements stores)
{
	alias Elements = staticMap!(Unqual, StoreElements);
	
	template toPointer(T)
	{
		alias toPointer = T*;
	}
	
	struct Holder
	{
		alias StoreElementsPtrs = staticMap!(toPointer, StoreElements);
		StoreElementsPtrs storePtrs;
		
		this(ref StoreElements stores)
		{
			foreach(i, _; StoreElements)
			{
				storePtrs[i] = &stores[i];
			}
		}
		
		void opAssign(Tuple!Elements values)
		{
			foreach(i, _; Elements)
			{
				*storePtrs[i] = values[i];
			}
		}
	}
	
	return Holder(stores);
}

void main()
{
	// 入力
	auto S = readln.chomp;
	long N = readln.chomp.to!long;
	auto T = readln.chomp;
	// 答えの計算と出力
	if (S.count('o') != T.count('o') || (S == T && N & 1)) {
		writeln("SUCCESS");
		return;
	}
	// 動かした手数、帽子の配置
	alias P = Tuple!(int, string);
	auto que = DList!P(P(0, S));
	while (!que.empty) {
		int n;
		string s;
		tie(n, s) = que.front;
		que.removeFront;
		if (s == T) {
			writeln("FAILURE");
			return;
		}
		if (n < N) {
			que.insertBack(P(n + 1, "" ~ s[0] ~ s[2] ~ s[1]));
			que.insertBack(P(n + 1, "" ~ s[1] ~ s[0] ~ s[2]));
		}
	}
	writeln("SUCCESS");
}
0