結果
| 問題 | No.74 貯金箱の退屈 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-17 15:36:23 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 1 ms / 5,000 ms |
| + 808µs | |
| コード長 | 1,689 bytes |
| 記録 | |
| コンパイル時間 | 2,384 ms |
| コンパイル使用メモリ | 341,100 KB |
| 実行使用メモリ | 9,872 KB |
| 最終ジャッジ日時 | 2026-10-17 15:36:28 |
| 合計ジャッジ時間 | 4,730 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
template <size_t MAX_COL> struct BitMatrix{
int H, W;
vector<bitset<MAX_COL>> A;
BitMatrix(int n) : H(n), W(MAX_COL), A(n) {}
const bitset<MAX_COL>& operator[](int k) const { return A[k]; }
bitset<MAX_COL>& operator[](int k) { return A[k]; }
int gauss_jordan(bool extended = false) {
int rank = 0;
for(int j = 0; j < W - extended; j++) {
int pivot = -1;
for(int i = rank; i < H; i++) {
if(A[i][j]){
pivot = i;
break;
}
}
if(pivot==-1)continue;
swap(A[pivot], A[rank]);
for (int i = 0 ; i < H ; i++) {
if (i != rank && A[i][j])A[i]^=A[rank];
}
rank++;
}
return rank;
}
std::pair<int, std::vector<int>> linear_equation(const std::vector<int>& b) {
assert(H == (int)b.size());
for (int i = 0; i < H; i++) A[i][W] = b[i];
int rank = gauss_jordan(true);
for (int i = rank; i < H; i++) {
if (A[i][W]) return {-1, std::vector<int>{}};
}
std::vector<int> res(W, 0);
for (int i = 0; i < rank; i++) res[i] = A[i][W];
return {rank, res};
}
};
int main(){
int n;
cin >> n;
BitMatrix<101> B(n);
vector<int> d(n), w(n);
for(auto &&v : d) cin >> v;
for(auto &&v : w) cin >> v;
for(int i = 0; i < n; i++){
B[(i + d[i]) % n][i] = 1;
B[((i - d[i]) % n + n) % n][i] = 1;
w[i] ^= 1;
}
auto ans = B.linear_equation(w);
cout << (ans.first != -1 ? "Yes" : "No") << '\n';
}