結果
| 問題 | No.197 手品 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-05-10 17:33:55 |
| 言語 | D (dmd 2.111.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 928 bytes |
| 記録 | |
| コンパイル時間 | 795 ms |
| コンパイル使用メモリ | 98,232 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-12 19:06:45 |
| 合計ジャッジ時間 | 2,140 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 39 WA * 4 |
ソースコード
import std.algorithm, std.conv, std.range, std.stdio, std.string;
void main()
{
auto s1 = toInt(readln.chomp);
auto n = readln.chomp.to!size_t;
auto s2 = toInt(readln.chomp);
writeln(calc(s1, s2, n) ? "SUCCESS" : "FAILURE");
}
auto toInt(string s)
{
auto r = 0;
foreach (c; s) {
r <<= 1;
r |= c == 'o' ? 1 : 0;
}
return r;
}
auto calc(int s1, int s2, size_t n)
{
auto t1 = s1.popcnt, t2 = s2.popcnt;
if (t1 != t2) return true;
if (t1 == 0 || t1 == 3) return false;
if (t1 == 2) { s1 = ~s1 & 7; s2 = ~s2 & 7; }
auto i1 = s1.bsf, i2 = s2.bsf;
if (n == 0)
return i1 != i2;
else if (n == 1)
return i1 == 1 ? i2 == 1 : i2 != 1;
else
return false;
}
pragma(inline) {
import core.bitop;
pure int bsf(T)(T n) { return core.bitop.bsf(ulong(n)); }
pure int bsr(T)(T n) { return core.bitop.bsr(ulong(n)); }
pure int popcnt(T)(T n) { return core.bitop.popcnt(ulong(n)); }
}