結果

問題 No.74 貯金箱の退屈
ユーザー te-sh
提出日時 2017-01-25 10:50:58
言語 D
(dmd 2.109.1)
結果
WA  
実行時間 -
コード長 1,107 bytes
コンパイル時間 1,017 ms
コンパイル使用メモリ 115,368 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-06-12 06:34:08
合計ジャッジ時間 1,941 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 18 WA * 12
権限があれば一括ダウンロードができます

ソースコード

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