Submission #235003

#TimeUsernameProblemLanguageResultExecution timeMemory
235003rajarshi_basuChameleon's Love (JOI20_chameleon)C++14
Compilation error
0 ms0 KiB
/* SOLUTION: let pile be of form 110 110 (in binary). Then we need to disbalance it (1,1->0,2 and similar) in all turns which lets us use 1 turn less overall for the heap. Else just remove from the highest pile. For player B, try to keep everything same same, and disbalance only if you have to. */ #include <stdio.h> #include <stdlib.h> #include <iostream> #include <vector> #include <algorithm> #include <fstream> #include <queue> #include <deque> #include <iomanip> #include <cmath> #include <set> #include <stack> #include <map> #include <unordered_map> #define FOR(i,n) for(int i=0;i<n;i++) #define FORE(i,a,b) for(int i=a;i<=b;i++) #define ll long long #define ld long double //#define int short #define vi vector<int> #define pb push_back #define ff first #define ss second #define ii pair<int,int> #define iii pair<int,ii> #define pll pair<ll,ll> #define plll pair<ll,pll> #define mp make_pair #define vv vector #define endl '\n' #include "chameleon.h" using namespace std; bool query(vi all, int extra){ all.pb(extra); return Query(all) == all.size(); } int query3(int a,int b,int c){ vi all;all.pb(a);all.pb(b);all.pb(c); return Query(all); } vi res; void binsrch(vi allNum,int x){ if(allNum.size() == 1){ res.pb(allNum[0]); return; } vi halves[2]; FOR(i,allNum.size())halves[i%2].pb(i); FOR(j,2)if(query(halves[j],x))binsrch(halves[j],x); } vi indsets[4]; void Solve(int n){ indsets[0].pb(1); FORE(i,2,n){ FOR(j,4){ if(indsets[j].empty() or query(indsets[j],i)){ indsets[j].pb(i); } } } // everything has been partitioned. vi edges[n+1]; FOR(i,4){ for(auto e : indsets[i]){ res.clear(); FOR(j,4){ if(i != j){ binsrch(indsets[j],e); for(auto x:res)edges[e].pb(x); } } } } int other[n+1]; set<int> allSets[n+1]; FOR(i,n+1)for(auto x:edges[i])allSets[i].insert(x); FORE(i,1,n){ if(edges[i].size() == 1){ other[i] = edges[i][0]; other[edges[i][0]] = i; continue; } // has 3 edges; int a = query3(i,edges[i][0],edges[i][1]); int b = query3(i,edges[i][1],edges[i][2]); int numTorem; if(a == 1){ numTorem = edges[i][2]; }else if(b == 1){ numTorem = edges[i][0]; }else{ numTorem = edges[i][1]; } allSets[i].erase(numTorem); allSets[numTorem].erase(i); } FORE(i,1,n){ int x = *(allSets[i].begin()); if(i < x)Answer(i,x); } } int main(){ }

Compilation message (stderr)

chameleon.cpp: In function 'bool query(std::vector<int>, int)':
chameleon.cpp:45:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  return Query(all) == all.size();
         ~~~~~~~~~~~^~~~~~~~~~~~~
chameleon.cpp: In function 'void binsrch(std::vector<int>, int)':
chameleon.cpp:22:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define FOR(i,n) for(int i=0;i<n;i++)
chameleon.cpp:60:6:
  FOR(i,allNum.size())halves[i%2].pb(i);
      ~~~~~~~~~~~~~~~           
chameleon.cpp:60:2: note: in expansion of macro 'FOR'
  FOR(i,allNum.size())halves[i%2].pb(i);
  ^~~
chameleon.cpp: In function 'void Solve(int)':
chameleon.cpp:87:6: warning: variable 'other' set but not used [-Wunused-but-set-variable]
  int other[n+1];
      ^~~~~
/tmp/cctxJlVG.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/ccZ4rpGY.o:chameleon.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status