Submission #113875

#TimeUsernameProblemLanguageResultExecution timeMemory
113875Mamnoon_SiamMinerals (JOI19_minerals)C++17
90 / 100
90 ms4104 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; mt19937 mrand(random_device{}()); int rnd(int x) { return mrand() % x; } struct RNG { int operator () (int n) { return rnd(n); } }; void scattered(vector<int> u, vector<int> v, int f) { if(u.empty()) return; if(u.size() == 1) { Answer(u.back(), v.back()); return; } random_shuffle(u.begin(), u.end(), RNG()); random_shuffle(v.begin(), v.end(), RNG()); int mid = ((int)u.size() - 2) >> 1; int last; if(f) { for(int i = mid + 1; i < v.size(); i++) { last = Query(v[i]); } } else { for(int i = 0; i <= mid; i++) { last = Query(v[i]); } } vector<int> lu, lv(v.begin(), v.begin() + mid + 1), ru, rv(v.begin() + mid + 1, v.end()); for(int i = 0; i < u.size(); i++) { if(lu.size() == lv.size()) { ru.emplace_back(u[i]); } else if(ru.size() == rv.size()) { lu.emplace_back(u[i]); } else { int rep = Query(u[i]); if(rep == last) { lu.emplace_back(u[i]); } else { ru.emplace_back(u[i]); } last = rep; } } scattered(lu, lv, 1); scattered(ru, rv, 0); } void together(vector<int> v) { random_shuffle(v.begin(), v.end(), RNG()); // random_shuffle(v.begin(), v.end(), RNG()); if(v.empty()) return; if(v.size() == 2) return Answer(v[0], v[1]); if(v.size() == 4) { int last = Query(v[0]); if(Query(v[1]) == last) { together({v[0], v[1]}); together({v[2], v[3]}); return; } else { scattered({v[2], v[3]}, {v[0], v[1]}, 1); } return; } vector<int> l, r; int last = -1; for(int i = 0; i < v.size(); i++) { if(r.size() == v.size() / 2) { l.emplace_back(v[i]); continue; } int rep = Query(v[i]); if(rep == last) { l.emplace_back(v[i]); } else { r.emplace_back(v[i]); } last = rep; } scattered(l, r, 1); } void Solve(int N) { vector<int> v(2 * N); iota(v.begin(), v.end(), 1); together(v); }

Compilation message (stderr)

minerals.cpp: In function 'void scattered(std::vector<int>, std::vector<int>, int)':
minerals.cpp:25:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = mid + 1; i < v.size(); i++) {
                        ~~^~~~~~~~~~
minerals.cpp:34:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < u.size(); i++) {
                 ~~^~~~~~~~~~
minerals.cpp: In function 'void together(std::vector<int>)':
minerals.cpp:73:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < v.size(); i++) {
                 ~~^~~~~~~~~~
minerals.cpp: In function 'void scattered(std::vector<int>, std::vector<int>, int)':
minerals.cpp:41:4: warning: 'last' may be used uninitialized in this function [-Wmaybe-uninitialized]
    if(rep == last) {
    ^~
#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...