Submission #144731

#TimeUsernameProblemLanguageResultExecution timeMemory
144731SamAndZagonetka (COI18_zagonetka)C++17
0 / 100
3070 ms376 KiB
#include <bits/stdc++.h> using namespace std; const int N = 102; int n; int a[N]; int minu[N], maxu[N]; int ans[N][N]; bool qry(int a[]) { cout << "query"; for (int k = 1; k <= n; ++k) cout << ' ' << a[k]; cout << endl; int x; cin >> x; return x; } void endf(int i, int j) { if (a[i] < a[j]) { for (int k = 1; k <= n; ++k) minu[k] = k; int z = n + 1; for (int k = 1; k <= n; ++k) { if (k == i) { maxu[j] = --z; maxu[k] = --z; continue; } if (k == j) { continue; } maxu[k] = --z; } } else { int z = 0; for (int k = 1; k <= n; ++k) { if (k == i) { minu[j] = ++z; minu[k] = ++z; continue; } if (k == j) { continue; } minu[k] = ++z; } for (int k = 1; k <= n; ++k) maxu[k] = n - k + 1; } cout << "end" << endl; for (int i = 1; i <= n; ++i) cout << minu[i] << ' '; cout << endl; for (int i = 1; i <= n; ++i) cout << maxu[i] << ' '; cout << endl; } int main() { //freopen("input.txt", "r", stdin); cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; if (false && n <= 6) { for (int i = 1; i <= n; ++i) minu[i] = maxu[i] = a[i]; sort(a + 1, a + n + 1); do { if (qry(a)) { for (int i = 1; i <= n; ++i) { if (a[i] == minu[i]) continue; if (a[i] < minu[i]) { for (int j = 1; j <= n; ++j) minu[j] = a[j]; } break; } for (int i = 1; i <= n; ++i) { if (a[i] == maxu[i]) continue; if (a[i] > maxu[i]) { for (int j = 1; j <= n; ++j) maxu[j] = a[j]; } break; } } } while (next_permutation(a + 1, a + n + 1)); cout << "end" << endl; for (int i = 1; i <= n; ++i) cout << minu[i] << ' '; cout << endl; for (int i = 1; i <= n; ++i) cout << maxu[i] << ' '; cout << endl; } else { for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { swap(a[i], a[j]); ans[i][j] = qry(a); swap(a[i], a[j]); } } for (int ii = 1; ii <= n; ++ii) { for (int jj = 1; jj <= n; ++jj) { if (ii == jj) continue; bool z = true; for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { swap(a[i], a[j]); if ((a[ii] < a[jj] && ans[i][j] == 0) || (a[ii] > a[jj] && ans[i][j] == 1)) { z = false; swap(a[i], a[j]); break; } swap(a[i], a[j]); } if (z == false) break; } if (ii > jj) swap(ii, jj); if (z) { endf(ii, jj); return 0; } } } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...