제출 #1226125

#제출 시각아이디문제언어결과실행 시간메모리
1226125lolokaMinerals (JOI19_minerals)C++20
0 / 100
1 ms420 KiB
#include "minerals.h" #include<bits/stdc++.h> using namespace std; mt19937 rng(time(0)); void slv(vector<int> v1, vector<int> v2, int z) { //cout << "\n"; if((int)v1.size() == 1) { Answer(v1[0], v2[0]); return; } int kl = z; int n = (int)v1.size(); vector<int> h11, h12, h21, h22; for(int i = 0; i < n / 2; i++) h11.push_back(v1[i]); for(int i = n / 2; i < n; i++) h21.push_back(v1[i]); map<int, int> mp, mp1; int kl2 = 0; shuffle(v2.begin(), v2.end(), rng); for(int i = 0; i < n; i++) { if((int)h12.size() == n / 2) h22.push_back(v2[i]); else if((int)h22.size() == n - n / 2) h12.push_back(v2[i]); else { int k = Query(v2[i]); if(k == kl) h12.push_back(v2[i]), mp[i] = 1; else h22.push_back(v2[i]), mp1[v2[i]] = 1; kl = k; } } for(int i = n / 4; i < n / 2; i++) kl = Query(v1[i]); for(int i = 0; i < n; i++) if(mp[i] == 1) kl = Query(v2[i]), mp.erase(i); slv(h11, h12, mp.size()); swap(h21, h22); for(int i = 0; i < n / 4; i++) { if(!mp1[h21[i]]) Query(h21[i]); } for(int i = n / 4; i < n / 2; i++) { if(mp1[h21[i]]) Query(h21[i]); } slv(h21, h22, n / 4); } void Solve(int n) { vector<int> v1, v2; int kl = 0; for(int i = 1; i <= 2 * n; i++) { int k = Query(i); if(k == kl) v2.push_back(i); else v1.push_back(i); kl = k; } for(int i = n / 2; i < n; i++) Query(v1[i]); for(auto i : v2) Query(i); slv(v1, v2, 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...