제출 #620535

#제출 시각아이디문제언어결과실행 시간메모리
620535kshitij_sodaniMinerals (JOI19_minerals)C++14
100 / 100
525 ms6304 KiB
//#pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second #define endl '\n' #include "minerals.h" vector<pair<int,int>> ans; int cur=0; set<int> xx; mt19937 rng; void solve(vector<int> aa,vector<int> bb,int y=0){ rng=mt19937(chrono::steady_clock::now().time_since_epoch().count()); /*for(auto j:aa){ cout<<j<<"."; } cout<<endl; for(auto j:bb){ cout<<j<<"."; } cout<<endl;*/ if(aa.size()==1){ //cout<<aa[0]<<":"<<bb[0]<<endl; ans.pb({aa[0],bb[0]}); return; } //int cur=0; vector<int> cc; vector<int> dd; vector<int> ee; vector<int> ff; int x=aa.size()/2; if(aa.size()>4){ x+=(aa.size()*4)/34; } /* if(aa.size()>64){ x+=10; } else if(aa.size()> else if(aa.size()>16){ x+=4; } else if(aa.size()>8){ x+=2;//=2; } else if(aa.size()>2){ x++; }*/ for(int i=0;i<aa.size();i++){ if(i<x){ dd.pb(aa[i]); continue; } cur=Query(aa[i]); xx.insert(aa[i]); cc.pb(aa[i]); } shuffle(bb.begin(),bb.end(),rng); for(int i=0;i+1<bb.size();i++){ if(ee.size()==cc.size()){ for(int j=i;j+1<bb.size();j++){ ff.pb(bb[j]); } break; } else if(dd.size()==ff.size()){ for(int j=i;j+1<bb.size();j++){ ee.pb(bb[j]); } break; } int cur2=Query(bb[i]); /* if(bb.size()==4){ cout<<cur<<","<<cur2<<","<<bb[i]<<endl; }*/ if(y==0 and cur2==cur){ ee.pb(bb[i]); continue; } else if(y==1 and cur2!=cur){ cur=cur2; ee.pb(bb[i]); continue; } //Query(bb[i]); cur=cur2; ff.pb(bb[i]); } if(ee.size()<cc.size()){ ee.pb(bb.back()); } else{ ff.pb(bb.back()); } /*for(auto j:cc){ cur=Query(j); }*/ /*for(auto j:cc){ cout<<j<<","; } cout<<endl; for(auto j:ee){ cout<<j<<","; } cout<<endl<<endl;;*/ solve(cc,ee,y^1); solve(dd,ff,y); } void Solve(int n) { vector<int> aa; vector<int> bb; int cur5=0; for(int i=1;i<=2*n;i++){ int cur2=Query(i); if(cur2>cur5){ aa.pb(i); cur5=cur2; continue; } bb.pb(i); //Query(i); } /* for(auto j:aa){ Query(j); } */ solve(aa,bb,1); for (int i=0; i<n;i++) { Answer(ans[i].a,ans[i].b); } }

컴파일 시 표준 에러 (stderr) 메시지

minerals.cpp: In function 'void solve(std::vector<int>, std::vector<int>, int)':
minerals.cpp:54:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |  for(int i=0;i<aa.size();i++){
      |              ~^~~~~~~~~~
minerals.cpp:64:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |  for(int i=0;i+1<bb.size();i++){
      |              ~~~^~~~~~~~~~
minerals.cpp:66:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |    for(int j=i;j+1<bb.size();j++){
      |                ~~~^~~~~~~~~~
minerals.cpp:72:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |    for(int j=i;j+1<bb.size();j++){
      |                ~~~^~~~~~~~~~
#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...