結果

問題 No.74 貯金箱の退屈
ユーザー te-shte-sh
提出日時 2017-01-25 10:50:58
言語 D
(dmd 2.106.1)
結果
WA  
実行時間 -
コード長 1,107 bytes
コンパイル時間 817 ms
コンパイル使用メモリ 99,528 KB
実行使用メモリ 5,316 KB
最終ジャッジ日時 2023-09-03 00:49:44
合計ジャッジ時間 2,402 ms
ジャッジサーバーID
(参考情報)
judge13 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,380 KB
testcase_01 AC 1 ms
4,376 KB
testcase_02 AC 1 ms
4,380 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 1 ms
4,380 KB
testcase_16 AC 1 ms
4,380 KB
testcase_17 AC 1 ms
4,376 KB
testcase_18 AC 1 ms
4,376 KB
testcase_19 AC 2 ms
4,376 KB
testcase_20 AC 2 ms
4,376 KB
testcase_21 AC 2 ms
4,376 KB
testcase_22 AC 2 ms
4,376 KB
testcase_23 AC 1 ms
4,380 KB
testcase_24 AC 2 ms
4,380 KB
testcase_25 AC 2 ms
4,380 KB
testcase_26 AC 2 ms
4,376 KB
testcase_27 AC 2 ms
4,376 KB
testcase_28 AC 2 ms
4,376 KB
testcase_29 AC 2 ms
4,380 KB
testcase_30 AC 1 ms
4,376 KB
testcase_31 AC 1 ms
4,380 KB
testcase_32 AC 1 ms
4,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import std.algorithm, std.conv, std.range, std.stdio, std.string;
import std.bitmanip;  // BitArray
import std.container;

void main()
{
  auto n = readln.chomp.to!size_t;
  auto di = readln.split.to!(int[]);
  auto wi = readln.split.to!(int[]).to!(bool[]);

  auto aij = new bool[][](n + 1, n);
  foreach (i; n.iota) {
    auto d1 = (i.to!int + di[i]) % n;
    auto d2 = ((i.to!int - di[i]) % n + n) % n;
    aij[i][d1] = aij[i][d2] = true;
  }
  aij[n][] = (wi.map!"!a".array)[];

  auto bi = transposedBitArray(aij, n);

  foreach (i; n.iota) {
    if (!bi[i][i]) {
      auto j = bi[i+1..$].countUntil!(b => b[i]);
      if (j != -1) swap(bi[i], bi[i + j]);
    }
    if (bi[i][i])
      foreach (ref b; bi[i+1..$])
        if (b[i]) b ^= bi[i];
  }

  writeln(hasSolution(bi, n) ? "Yes" : "No");
}

auto transposedBitArray(bool[][] aij, size_t n)
{
  auto bi = new BitArray[](n);
  auto i = size_t(0);
  foreach (ai; aij.transposed)
    bi[i++] = BitArray(ai.array);
  return bi;
}

auto hasSolution(BitArray[] bi, size_t n)
{
  foreach (i, b; bi)
    if (!b[i] && b[n]) return false;
  return true;
}
0