답안 #640631

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
640631 2022-09-15T03:56:17 Z SanguineChameleon Zagonetka (COI18_zagonetka) C++14
27 / 100
74 ms 440 KB
// BEGIN BOILERPLATE CODE
 
#include <bits/stdc++.h>
using namespace std;
 
#ifdef KAMIRULEZ
	const bool kami_loc = true;
	const long long kami_seed = 69420;
#else
	const bool kami_loc = false;
	const long long kami_seed = chrono::steady_clock::now().time_since_epoch().count();
#endif
 
const string kami_fi = "kamirulez.inp";
const string kami_fo = "kamirulez.out";
mt19937_64 kami_gen(kami_seed);
 
long long rand_range(long long rmin, long long rmax) {
	uniform_int_distribution<long long> rdist(rmin, rmax);
	return rdist(kami_gen);
}
 
void file_io(string fi, string fo) {
	if (fi != "" && (!kami_loc || fi == kami_fi)) {
		freopen(fi.c_str(), "r", stdin);
	}
	if (fo != "" && (!kami_loc || fo == kami_fo)) {
		freopen(fo.c_str(), "w", stdout);
	}
}
 
void set_up() {
	if (kami_loc) {
		file_io(kami_fi, kami_fo);
	}
	ios_base::sync_with_stdio(0);
	cin.tie(0);
}
 
void just_do_it();
 
void just_exec_it() {
	if (kami_loc) {
		auto pstart = chrono::steady_clock::now();
		just_do_it();
		auto pend = chrono::steady_clock::now();
		long long ptime = chrono::duration_cast<chrono::milliseconds>(pend - pstart).count();
		string bar(50, '=');
		cout << '\n' << bar << '\n';
		cout << "Time: " << ptime << " ms" << '\n';
	}
	else {
		just_do_it();
	}
}
 
int main() {
	set_up();
	just_exec_it();
	return 0;
}
 
// END BOILERPLATE CODE
 
// BEGIN MAIN CODE
 
const int ms = 1e2 + 20;
int a[ms];
int b[ms];
int c[ms];
int p[ms];
bool g[ms];
vector<int> adj1[ms];
vector<int> adj2[ms];
vector<int> adj3[ms];
int dzi[ms];
int dzo[ms];
int mi[ms];
int ma[ms];
 
void dfs(int u, bool f) {
	g[u] = true;
	for (auto v: adj1[u]) {
		if ((u > v) == f && !g[v]) {
			dfs(v, f);
		}
	}
}
 
void just_do_it() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		p[a[i]] = i;
	}
	for (int i = 1; i <= n - 1; i++) {
		for (int j = 1; j + i <= n; j++) {
			int lt = j;
			int rt = j + i;
			for (int k = lt; k <= rt; k++) {
				g[k] = false;
			}
			vector<int> pp;
			dfs(rt, 1);
			if (g[lt]) {
				continue;
			}
			for (int k = lt; k <= rt; k++) {
				if (g[k]) {
					pp.push_back(k);
				}
				g[k] = false;
			}
			dfs(lt, 0);
			for (int k = lt; k <= rt; k++) {
				if (g[k]) {
					pp.push_back(k);
				}
				g[k] = false;
			}
			int pt = lt - 1;
			for (int k = 1; k <= lt - 1; k++) {
				b[k] = k;
			}
			for (int k = rt + 1; k <= n; k++) {
				b[k] = k;
			}
			for (int k = lt; k <= rt; k++) {
				b[k] = 0;
			}
			for (auto x: pp) {
				b[x] = ++pt;
			}
			for (int k = lt; k <= rt; k++) {
				if (!b[k]) {
					b[k] = ++pt;
				}
			}
			cout << "query";
			for (int i = 1; i <= n; i++) {
				cout << " " << b[a[i]];
			}
			cout << endl;
			int d;
			cin >> d;
			if (d == 0) {
				adj2[p[lt]].push_back(p[rt]);
				adj3[p[rt]].push_back(p[lt]);
				dzo[p[lt]]++;
				dzi[p[rt]]++;
				adj1[lt].push_back(rt);
				adj1[rt].push_back(lt);
			}
		}
	}
	set<int, greater<int>> s;
	for (int i = 1; i <= n; i++) {
		if (dzo[i] == 0) {
			s.insert(i);
		}
	}
	for (int i = n; i >= 1; i--) {
		int u = *s.begin();
		mi[u] = i;
		s.erase(u);
		for (auto v: adj3[u]) {
			dzo[v]--;
			if (dzo[v] == 0) {
				s.insert(v);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		if (dzi[i] == 0) {
			s.insert(i);
		}
	}
	for (int i = 1; i <= n; i++) {
		int u = *s.begin();
		ma[u] = i;
		s.erase(u);
		for (auto v: adj2[u]) {
			dzi[v]--;
			if (dzi[v] == 0) {
				s.insert(v);
			}
		}
	}
	cout << "end" << endl;
	for (int i = 1; i <= n - 1; i++) {
		cout << mi[i] << " ";
	}
	cout << mi[n];
	cout << endl;
	for (int i = 1; i <= n - 1; i++) {
		cout << ma[i] << " ";
	}
	cout << ma[n];
	cout << endl;
}
 
// END MAIN CODE

Compilation message

zagonetka.cpp: In function 'void file_io(std::string, std::string)':
zagonetka.cpp:25:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   freopen(fi.c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
zagonetka.cpp:28:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |   freopen(fo.c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 1 ms 208 KB Output is correct
3 Correct 0 ms 336 KB Output is correct
4 Correct 0 ms 208 KB Output is correct
5 Correct 1 ms 208 KB Output is correct
6 Correct 1 ms 208 KB Output is correct
7 Correct 0 ms 208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 312 KB Output is correct
2 Correct 26 ms 308 KB Output is correct
3 Correct 32 ms 308 KB Output is correct
4 Correct 27 ms 316 KB Output is correct
5 Correct 8 ms 208 KB Output is correct
6 Correct 28 ms 308 KB Output is correct
7 Correct 4 ms 208 KB Output is correct
8 Correct 7 ms 208 KB Output is correct
9 Correct 24 ms 208 KB Output is correct
10 Correct 12 ms 208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 208 KB Output is correct
2 Correct 1 ms 208 KB Output is correct
3 Correct 4 ms 208 KB Output is correct
4 Incorrect 4 ms 332 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 312 KB Output is correct
2 Correct 74 ms 208 KB Output is correct
3 Correct 59 ms 208 KB Output is correct
4 Correct 3 ms 208 KB Output is correct
5 Correct 4 ms 332 KB Output is correct
6 Correct 3 ms 208 KB Output is correct
7 Correct 15 ms 336 KB Output is correct
8 Correct 29 ms 340 KB Output is correct
9 Correct 21 ms 324 KB Output is correct
10 Correct 73 ms 312 KB Output is correct
11 Correct 60 ms 208 KB Output is correct
12 Correct 54 ms 312 KB Output is correct
13 Incorrect 59 ms 440 KB Output isn't correct
14 Halted 0 ms 0 KB -