Submission #1091854

#TimeUsernameProblemLanguageResultExecution timeMemory
1091854_8_8_Super Dango Maker (JOI22_dango3)C++17
7 / 100
10026 ms2988 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) { sort(f.begin(), f.end()); ll it = 163, p = 163, mod = (int)998244353, 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 j:a) { bad[j] = 0; } int lst = 0; vector<int> ret; int new_B = -1; for(int i = 0; i < m; i++) { int l = lst - 1, r = (int)a.size() - 1; if(B != -1 && i == 0) { r = B; } int left = m - i; if(left == (int)a.size() - lst) { for(int j = lst; j < (int)a.size(); j++) { ret.push_back(a[j]); } break; } while(r - l > 1) { int mid = (l + r) >> 1; vector<int> t = b; for(int j = 0; j <= mid; j++) { if(!bad[a[j]])t.push_back(a[j]); } if(qr(t)) { r = mid; } else { l = mid; } } lst = r + 1; ret.push_back(a[r]); bad[a[r]] = 1; if(i == 0 && B == -1) { new_B = r - 1; } } B = new_B; return ret; } vector<int> res[N]; 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 < n; i++) { timer++; vector<int> nv = get(f, bf); bf.push_back(nv[0]); for(int j = 0; j < m; j++) { // cout << nv[j] << ' '; res[j].push_back(nv[j]); vis[nv[j]] = timer; } // cout << '\n'; vector<int> sw; for(int j:f) { if(vis[j] != timer) { sw.push_back(j); } } f = sw; } for(int i = 0; i < m; i++) { Answer(res[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...