Submission #1091863

#TimeUsernameProblemLanguageResultExecution timeMemory
1091863_8_8_Super Dango Maker (JOI22_dango3)C++17
22 / 100
468 ms2992 KiB
#include "dango3.h" #include <bits/stdc++.h> #include <vector> using namespace std; int n, m; const int N = 401; bool bad[N * 26]; int B = -1; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef long long ll; unordered_map<ll, int> mem; int qr(vector<int> &f) { ll it = 163, p = 163, mod = (ll)1e11 + 7, h = 0; for(int i:f) { h += it * 1ll * i % mod; if(h >= mod) h -= mod; it = it * p % mod; } if(mem.count(h)) return mem[h]; return mem[h] = Query(f); } vector<int> get(vector<int> &a) { vector<int> b; for(int i = 0; i < (int)a.size(); i++) { b.push_back(a[i]); if(qr(b)) { break; } } reverse(b.begin(), b.end()); vector<int> c; for(int i = 0; i < (int)b.size(); i++) { vector<int> t = c; for(int j = i + 1; j < (int)b.size(); j++) { t.push_back(b[j]); } if(!qr(t)) { c.push_back(b[i]); } } return c; } int timer = 0, vis[N * 26]; void Solve(int _n, int _m) { n = _n, m = _m; vector<int> f, bf; for(int i = 1; i <= n * m; i++) { f.push_back(i); } shuffle(f.begin(), f.end(), rng); for(int i = 0; i < m; i++) { timer++; vector<int> nv = get(f); Answer(nv); bf.push_back(nv[0]); for(int j = 0; j < n; j++) { vis[nv[j]] = timer; } vector<int> sw; for(int j:f) { if(vis[j] != timer) { sw.push_back(j); } } f = sw; shuffle(f.begin(), f.end(), rng); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...