QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#593128#9319. Bull FarmarcaWA 213ms5708kbC++232.7kb2024-09-27 11:45:552024-09-27 11:45:56

Judging History

你现在查看的是最新测评结果

  • [2024-09-27 11:45:56]
  • 评测
  • 测评结果:WA
  • 用时:213ms
  • 内存:5708kb
  • [2024-09-27 11:45:55]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
#define endl "\n"
#ifndef ONLINE_JUDGE
#include "bits/debug.h"
#endif
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define ROF(i, a, b) for (int i = a; i >= b; i--)
/* ============================ CONFIG BEGIN ============================ */
constexpr int N = 2005;
constexpr int Q = 1e6 + 5;

bitset<N> G[N], vis[N];
int t[N];
vector<array<int, 3>> qlist[N];
vector<array<int, 2>> elist[N];
bitset<N> inq[N];
int ans[Q];
int buc[N];
int n, l, q;

int fa[N];
int root(int u) {
	return u == fa[u] ? u : fa[u] = root(fa[u]);
}

queue<pair<int, int>> Queue;

int input() {
	char a, b;
	cin >> a >> b;
	return (a - 48) * 50 + (b - 48);
}

void pushqueue(int u, int v) {
	if (!inq[u].test(v)) {
		Queue.push({u, v});
		inq[u].set(v);
	}
}

void work(int u, int v) {
	G[u].set(v);

	auto newE = G[u];
	G[u] |= G[v];
	newE ^= G[u];

	while (1) {
		int w = newE._Find_first();

		if (w < 1 or w > n) break;
		pushqueue(u, w);
		newE.flip(w);
	}
}

void add(int u, int v) {
	if (G[u].test(v)) return;

	pushqueue(u, v);
	while (!Queue.empty()) {
		auto [u, v] = Queue.front();
		Queue.pop();
		work(u, v);
	}
}
/* ============================= CONFIG END ============================= */

void solve() {
	cin >> n >> l >> q;

	iota(fa, fa + n + 1, 0);

	FOR(id, 1, l) {
		unordered_set<int> s;
		fill(buc, buc + n + 1, 0);
		FOR(i, 1, n) t[i] = input(), buc[t[i]]++;

		int cnt1 = count_if(buc + 1, buc + n + 1, [&](auto a) { return a != 0; });
		if (cnt1 <= n - 2) continue;
		else if (cnt1 == n - 1) {
			int m2 = 0, m0 = 0;
			FOR(i, 1, n) {
				if (buc[i] == 2) m2 = i;
				if (buc[i] == 0) m0 = i;
			}
			// WARN(m2, m0);
			FOR(i, 1, n) {
				if (t[i] == m2) {
					elist[id].push_back({i, m0});
				}
			}
		} else {
			FOR(i, 1, n) {
				// if (root(i) == root(t[i])) continue;
				fa[root(i)] = root(t[i]);
				// DEBUG(i, t[i]);
				elist[id].push_back({i, t[i]});
				// elist[id].push_back({t[i], i});
			}
		}
	}

	FOR(i, 1, q) {
		int a = input(), b = input(), c = input();
		// INFO(a, b, c);
		qlist[c].push_back({a, b, i});
	}

	FOR(i, 1, n) {
		G[i].set(i);
	}

	FOR(i, 0, l) {
		for (auto [u, v] : elist[i]) {
			add(u, v);
		}
		for (auto [a, b, id] : qlist[i]) {
			ans[id] = G[a].test(b);
		}
	}

	// SETCOLOR(BLUE);
	FOR(i, 1, q) {
		cout << ans[i];
	}
	cout << endl;
	// SETCOLOR(RESET);

	for (int i = 0; i <= n; i++) {
		G[i].reset();
		inq[i].reset();
	}

	for (int i = 0; i <= l; i++) {
		elist[i].clear();
		qlist[i].clear();
	}
}

int main() {
	// ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	int t = 1;
	cin >> t;
	while (t--) solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5588kb

input:

2
5 2 4
0305040201
0404040404
030300
020500
050102
020501
6 2 4
030603010601
010203060504
030202
060402
050602
060401

output:

1011
0100

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 3496kb

input:

1
3 3 6
020202
030301
030201
020102
030203
010201
010303
020303
010202

output:

010101

result:

ok single line: '010101'

Test #3:

score: -100
Wrong Answer
time: 213ms
memory: 5708kb

input:

200
10 10 5000
01060:04020305080709
0103070:060204050908
09070503080401060:02
050308010204090:0607
03010502040607080:09
03080109020504060:07
06050:09040302080107
07080305010409060:02
030809010:0204060507
0:060908070201050304
060700
090:03
09080:
070405
010703
0:0100
080601
030600
070206
0:0:09
08040...

output:

011110001101101111111111111111100101011110110101010110110110101011010101111111111111110101111111111110001111110111110111111101011111111110011111111111111111110001100111011111111111111111111011101110111111111111111111011111111111111111011011010100111110111111100111011100111111001110111111011001111110...

result:

wrong answer 1st lines differ - expected: '011110001101101111111111111111...1111111111111111101111111111111', found: '011110001101101111111111111111...1111111111111100100011111111011'