Submission #245209

#TimeUsernameProblemLanguageResultExecution timeMemory
245209kostia244Chameleon's Love (JOI20_chameleon)C++17
24 / 100
57 ms512 KiB
#include "chameleon.h" #include <bits/stdc++.h> using namespace std; using vi = vector<int>; bool add(vector<int> x, vector<int> v) { for(auto i : v) x.push_back(i); return Query(x) == x.size(); } vector<int> seg(vector<int> v, int l, int r) { vector<int> res; while(l <= r) res.push_back(v[l++]); return res; } vector<int> pref(vector<int> v, int x) { return seg(v, 0, x); } void Solve(int n) { vector<vi> g(2*n+1); vi l, r; for(int i = 1; i <= 2*n; i++) (add(l, {i}) ? l : r).push_back(i); //while(l.size() != n); vector<int> c; for(int i = 0; i < n; i++) { int f = 0; while(f < n && !add({l[i]}, seg(r, f, n-1))) { for(int z = 1<<9; z>>=1;) if(f+z < n && add(seg(r, f, f+z), {l[i]})) f += z; f += Query({l[i], r[f]}) == 2; g[r[f]].push_back(l[i]); g[l[i]].push_back(r[f]); f++; } } set<pair<int, int>> bad; for(int i = 1; i <= 2*n; i++) { if(g[i].size() == 1) continue; if(Query({g[i][0], g[i][1], i}) == 1) bad.insert(minmax(g[i][2], i)); else if(Query({g[i][0], g[i][2], i}) == 1) bad.insert(minmax(g[i][1], i)); else bad.insert(minmax(g[i][0], i)); } for(int i = 1; i <= 2*n; i++) { while(bad.count(minmax(i, g[i].back()))) g[i].pop_back(); if(i < g[i].back()) Answer(i, g[i].back()); } }

Compilation message (stderr)

chameleon.cpp: In function 'bool add(std::vector<int>, std::vector<int>)':
chameleon.cpp:7:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  return Query(x) == x.size();
         ~~~~~~~~~^~~~~~~~~~~
#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...