Submission #1103387

#TimeUsernameProblemLanguageResultExecution timeMemory
1103387horiaboeriuMouse (info1cup19_mouse)C++17
81.69 / 100
206 ms772 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; const int MAXN = 256; const int MOD = 200007; const int NIL = 0; int v[MAXN + 1], vrez[MAXN]; int cand[MAXN + 1][MAXN + 1], nrc[MAXN + 1], fr[MAXN + 1], next1[MAXN + 1]; char frecv[MAXN + 1]; int rez2, maxrez; int mod(int x) { return x < 0 ? -x : x; } mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); static inline unsigned long long genrand() { return uniform_int_distribution<unsigned long long>(0, (unsigned long long)-1)(rng) * 35023 % 1621931; } void solve(int n) { int i, j, x, rez, nr4, nrz, rezi; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { cand[i][j] = 1; } nrc[i] = n; } vector<int> q; for (i = 1; i <= n; i++) { while (nrc[i] > 1) { nrz = n; for (j = 1; j <= n; j++) { fr[j] = 1; } q.clear(); for (j = 1; j < i; j++) { q.push_back(v[j]); fr[v[j]] = 0; nrz--; } nr4 = mod(genrand()) % nrc[i] + 1; x = 1; while (nr4 > 0) { nr4 -= cand[i][x]; x++; } x--; q.push_back(x);//candidat random fr[x] = 0; nrz--; //in q sunt indexate de la 0 rezi = i - 1; for (j = i + 1; j <= n; j++) { nr4 = mod(genrand()) % nrz + 1; x = 1; while (nr4 > 0) { nr4 -= fr[x]; x++; } x--; q.push_back(x); fr[x] = 0; nrz--; if (cand[j][x] == 1 && nrc[j] == 1) { rezi++; } } rez = query(q); rez2++; if (rez == rezi) { //nu sunt pe pozitiile bune cei de la i la n for (j = i; j <= n; j++) { if (nrc[j] > 1 || cand[j][q[j - 1]] == 0) { nrc[j] -= cand[j][q[j - 1]]; cand[j][q[j - 1]] = 0; } } } else if (rez == n) { return; } } x = 1; while (cand[i][x] == 0) { x++; } v[i] = x; for (j = i + 1; j <= n; j++) { nrc[j] -= cand[j][v[i]]; cand[j][v[i]] = 0; } } q.clear(); for (i = 1; i <= n; i++) { q.push_back(v[i]); } query(q); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...