제출 #797517

#제출 시각아이디문제언어결과실행 시간메모리
797517alvingogo커다란 상품 (IOI17_prize)C++14
20 / 100
67 ms1788 KiB
#include "prize.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define p_q priority_queue using namespace std; map<int,vector<int> > m; int c=0,k=0; vector<int> query(int x){ if(m.find(x)==m.end()){ m[x]=ask(x); if(m[x][0]+m[x][1]==k){ c++; } else{ } return m[x]; } return m[x]; } mt19937 rnd(time(NULL)); int find_best(int n) { if(n<=5000){ for(int i=0;i<n;i++){ auto h=query(i); if(h[0]==0 && h[1]==0){ return i; } } } set<int> p; for(int i=0;i<110;i++){ int x=rnd()%n; while(p.find(x)!=p.end()){ x=rnd()%n; } p.insert(x); k=max(k,query(x)[0]+query(x)[1]); } m[-1]={0,k}; m[n]={k,0}; set<int> s; queue<pair<int,int> > q; q.push({-1,n}); while(q.size()){ auto h=q.front(); q.pop(); if(query(h.fs)==query(h.sc)){ continue; } int x=(h.fs+h.sc)/2; int flag=0; for(int i=x;i>h.fs;i--){ auto y=query(i); if(y[0]+y[1]==k){ q.push({i,h.sc}); q.push({h.fs,i}); flag=1; break; } else{ s.insert(i); } } if(flag==0){ for(int i=x+1;i<h.sc;i++){ auto y=query(i); if(y[0]+y[1]==k){ q.push({i,h.sc}); flag=1; break; } else{ s.insert(i); } } } } for(auto h:s){ if(query(h)[0]==0 && query(h)[1]==0){ return h; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...