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
AC × 1
AC × 58
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