Submission #632785

# Submission time Handle Problem Language Result Execution time Memory
632785 2022-08-20T19:40:58 Z flappybird None (JOI16_memory2) C++17
0 / 100
1 ms 212 KB
#include "Memory2_lib.h"
#include <bits/stdc++.h>
#include <cassert>
using namespace std;

#define MAX 60

int mp[MAX][MAX];
int chk[MAX];

int query(int x, int y) {
	if (x > y) swap(x, y);
	if (!~mp[x][y]) return mp[x][y] = Flip(x, y);
	return mp[x][y];
}

void Solve(int T, int N) {
	memset(mp, -1, sizeof(mp));
	vector<int> v;
	int i;
	while (1) {
		for (i = 0; i < N * 2; i++) if (!chk[i]) v.push_back(i);
		if (v.size() <= 2) {
			Answer(v[0], v[1], query(v[0], v[1]));
			return;
		}
		int M = v.size();
		vector<int> qarr, cnt(N);
		if (v.size() <= 4) {
			int j;
			for (i = 0; i < M; i++) for (j = i + 1; j < M; j++) cnt[query(v[i], v[j])]++;
			for (i = 0; i < N; i++) if (cnt[i] == 1) break;
			int k = i;
			for (i = 0; i < M; i++) for (j = i + 1; j < M; j++) {
				if (query(v[i], v[j]) == k) {
					Answer(v[i], v[j], k);
					chk[v[i]] = chk[v[j]] = 1;
				}
			}
			v.clear();
			continue;
		}
		for (i = 0; i < M; i++) qarr.push_back(query(v[i], v[(i + 1) % M]));
		int x, mx = 0;
		for (auto v : qarr) cnt[v]++, mx = max(mx, cnt[v]);
		for (i = 0; i < N; i++) if (cnt[i] == 4) break;
		if (i < N) {
			int k = i;
			int a, b;
			a = b = -1;
			for (i = 0; i < M; i++) if (qarr[i] != k && qarr[(i + 1) % M] == k) break;
			int num = M;
			for (; num >= 1; i = (i + 1) % M, num--) if (qarr[i] == qarr[(i + 1) % M] && qarr[i] == k) b = a, a = i, i = (i + 1) % M, num--;
			assert(~a);
			assert(~b);
			a++, a %= M;
			b++, b %= M;
			chk[v[a]] = chk[v[b]] = 1;
			Answer(v[a], v[b], k);
		}
		else {
			for (i = 0; i < N; i++) if (cnt[i] == mx) break;
			int k = i;
			int loc;
			for (i = 0; i < M; i++) if (qarr[i] == k) break;
			loc = i;
			while (qarr[(loc + M - 1) % M] == k) loc = (loc + M - 1) % M;
			int a, b, c, d;
			a = loc, b = a + 1, c = b + 1, d = c + 1;
			a %= M;
			b %= M;
			c %= M;
			d %= M;
			if (query(v[a], v[d]) == k) {
				if (query(v[b], v[d]) == k) a = b, c = d;
				chk[v[a]] = chk[v[c]] = 1;
				Answer(v[a], v[c], k);
			}
			else {
				chk[v[b]] = chk[v[c]] = 1;
				Answer(v[b], v[c], k);
			}
		}
		v.clear();
	}
}

Compilation message

memory2.cpp: In function 'void Solve(int, int)':
memory2.cpp:44:7: warning: unused variable 'x' [-Wunused-variable]
   44 |   int x, mx = 0;
      |       ^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Wrong Answer[3]
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Wrong Answer[3]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Wrong Answer[3]
2 Halted 0 ms 0 KB -