Submission #69205220
Source Code Expand
// 可逆操作なので同値類に分けることができる。N=6程度で実験をすると同値類の性質として、 // (1) 和が0、和が1で先頭または末尾が1のものは孤立している。 // (2) それ以外のものは同じ和のものが1つのグループをなしている。 // と分かる。 // //(2)は非自明で、十分性の証明はぱっと出てきませんね。 //和=1の区間同士のswapだけ考えれば十分なことは分かるんですが。 #include <iostream> #include <algorithm> #include <vector> #include <map> #include <atcoder/dsu> #define rep(i, n) for(i = 0; i < n; i++) using namespace std; using namespace atcoder; typedef vector<int> Vec; typedef vector<Vec> Mat; void printVec(Vec a) { for (int i = 0; i < a.size(); i++) { cout << a[i]; if (i + 1 < a.size()) cout << " "; } cout << endl; } Mat generate_moves(Vec v) { int n = v.size(); Mat vs; for (int a = 0; a < n; a++) { for (int b = a; b < n; b++) { for (int c = b + 1; c < n; c++) { for (int d = c; d < n; d++) { int i, s1 = 0, s2 = 0; for (i = a; i <= b; i++) s1 += v[i]; for (i = c; i <= d; i++) s2 += v[i]; if (s1 != s2) continue; Vec nv; for (i = 0; i < a; i++) nv.push_back(v[i]); for (i = c; i <= d; i++) nv.push_back(v[i]); for (i = b + 1; i < c; i++) nv.push_back(v[i]); for (i = a; i <= b; i++) nv.push_back(v[i]); for (i = d + 1; i < n; i++) nv.push_back(v[i]); vs.push_back(nv); } } } } return vs; } void test() { int n; cin >> n; Mat vecs; map<Vec, int> mp; int i, j; rep(i, (1 << n)) { Vec v; rep(j, n) v.push_back((i >> j) % 2); vecs.push_back(v); mp[v] = i; } dsu uf(1 << n); rep(i, (1 << n)) { Mat nvecs = generate_moves(vecs[i]); for (Vec nv: nvecs) { j = mp[nv]; uf.merge(i, j); } } auto gs = uf.groups(); for (auto g: gs) { cout << "g.size(): " << g.size() << endl; for (int id: g) { printVec(vecs[id]); } cout << "---" << endl; } cout << "gs.size(): " << gs.size() << endl; } bool solve(Vec a, Vec b) { int i; int n = a.size(); if (a == b) return true; int sa = 0, sb = 0; rep(i, n) sa += a[i]; rep(i, n) sb += b[i]; if (sa != sb) return false; if (sa == 1 && (a[0] == 1 || a[n - 1] == 1)) return false; if (sb == 1 && (b[0] == 1 || b[n - 1] == 1)) return false; return true; } int main() { int T; cin >> T; while (T--) { int n, i; cin >> n; Vec a(n), b(n); rep(i, n) cin >> a[i]; rep(i, n) cin >> b[i]; bool res = solve(a, b); if (res) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | B - Swap If Equal Sum |
User | startcpp |
Language | C++ 20 (gcc 12.2) |
Score | 500 |
Code Size | 2740 Byte |
Status | AC |
Exec Time | 153 ms |
Memory | 6368 KiB |
Compile Error
Main.cpp: In function ‘void printVec(Vec)’: Main.cpp:21:27: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare] 21 | for (int i = 0; i < a.size(); i++) { | ~~^~~~~~~~~~ Main.cpp:23:27: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare] 23 | if (i + 1 < a.size()) cout << " "; | ~~~~~~^~~~~~~~~~
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 500 / 500 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample.txt |
All | 1_1.txt, 1_10.txt, 1_2.txt, 1_3.txt, 1_4.txt, 1_5.txt, 1_6.txt, 1_7.txt, 1_8.txt, 1_9.txt, 2_1.txt, 2_10.txt, 2_2.txt, 2_3.txt, 2_4.txt, 2_5.txt, 2_6.txt, 2_7.txt, 2_8.txt, 2_9.txt, 3_1.txt, 3_10.txt, 3_11.txt, 3_12.txt, 3_13.txt, 3_14.txt, 3_15.txt, 3_16.txt, 3_17.txt, 3_18.txt, 3_19.txt, 3_2.txt, 3_20.txt, 3_3.txt, 3_4.txt, 3_5.txt, 3_6.txt, 3_7.txt, 3_8.txt, 3_9.txt, 4_1.txt, 4_10.txt, 4_11.txt, 4_12.txt, 4_13.txt, 4_14.txt, 4_15.txt, 4_16.txt, 4_2.txt, 4_3.txt, 4_4.txt, 4_5.txt, 4_6.txt, 4_7.txt, 4_8.txt, 4_9.txt, 5.txt, sample.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
1_1.txt | AC | 36 ms | 4776 KiB |
1_10.txt | AC | 36 ms | 4676 KiB |
1_2.txt | AC | 39 ms | 6040 KiB |
1_3.txt | AC | 37 ms | 4660 KiB |
1_4.txt | AC | 36 ms | 4988 KiB |
1_5.txt | AC | 36 ms | 6044 KiB |
1_6.txt | AC | 38 ms | 4784 KiB |
1_7.txt | AC | 36 ms | 5248 KiB |
1_8.txt | AC | 38 ms | 5580 KiB |
1_9.txt | AC | 35 ms | 5408 KiB |
2_1.txt | AC | 37 ms | 3752 KiB |
2_10.txt | AC | 37 ms | 3636 KiB |
2_2.txt | AC | 38 ms | 3540 KiB |
2_3.txt | AC | 39 ms | 3648 KiB |
2_4.txt | AC | 38 ms | 3608 KiB |
2_5.txt | AC | 37 ms | 3544 KiB |
2_6.txt | AC | 40 ms | 3708 KiB |
2_7.txt | AC | 38 ms | 3712 KiB |
2_8.txt | AC | 37 ms | 3748 KiB |
2_9.txt | AC | 38 ms | 3616 KiB |
3_1.txt | AC | 39 ms | 6232 KiB |
3_10.txt | AC | 36 ms | 6304 KiB |
3_11.txt | AC | 38 ms | 6304 KiB |
3_12.txt | AC | 39 ms | 6300 KiB |
3_13.txt | AC | 38 ms | 6260 KiB |
3_14.txt | AC | 39 ms | 6352 KiB |
3_15.txt | AC | 38 ms | 6304 KiB |
3_16.txt | AC | 39 ms | 6308 KiB |
3_17.txt | AC | 38 ms | 6364 KiB |
3_18.txt | AC | 39 ms | 6264 KiB |
3_19.txt | AC | 38 ms | 6224 KiB |
3_2.txt | AC | 37 ms | 6232 KiB |
3_20.txt | AC | 38 ms | 6304 KiB |
3_3.txt | AC | 37 ms | 6368 KiB |
3_4.txt | AC | 36 ms | 6260 KiB |
3_5.txt | AC | 38 ms | 6300 KiB |
3_6.txt | AC | 38 ms | 6296 KiB |
3_7.txt | AC | 38 ms | 6268 KiB |
3_8.txt | AC | 36 ms | 6300 KiB |
3_9.txt | AC | 38 ms | 6304 KiB |
4_1.txt | AC | 63 ms | 3524 KiB |
4_10.txt | AC | 63 ms | 3684 KiB |
4_11.txt | AC | 63 ms | 3484 KiB |
4_12.txt | AC | 64 ms | 3688 KiB |
4_13.txt | AC | 67 ms | 3500 KiB |
4_14.txt | AC | 67 ms | 3404 KiB |
4_15.txt | AC | 69 ms | 3500 KiB |
4_16.txt | AC | 13 ms | 3516 KiB |
4_2.txt | AC | 63 ms | 3524 KiB |
4_3.txt | AC | 64 ms | 3684 KiB |
4_4.txt | AC | 64 ms | 3408 KiB |
4_5.txt | AC | 63 ms | 3528 KiB |
4_6.txt | AC | 63 ms | 3524 KiB |
4_7.txt | AC | 64 ms | 3568 KiB |
4_8.txt | AC | 64 ms | 3496 KiB |
4_9.txt | AC | 63 ms | 3568 KiB |
5.txt | AC | 153 ms | 3684 KiB |
sample.txt | AC | 1 ms | 3516 KiB |