Submission #1271925

#TimeUsernameProblemLanguageResultExecution timeMemory
1271925Aviansh커다란 상품 (IOI17_prize)C++20
0 / 100
1 ms400 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; map<int,vector<int>>mp; int N; int cutoff; vector<int>kask(int n){ if(n<0||n>=N){ return {0,0}; } cout << "asking: " << n << "\n"; if(mp.find(n)!=mp.end()){ return mp[n]; } return mp[n]=ask(n); } int locate(int x){ if(x<0||x>=N){ return x; } for(int i = 0;i<N;i++){ if(x+i<N&&kask(x+i)[0]+kask(x+i)[1]==cutoff){ return x+i; } if(x-i>=0&&kask(x-i)[0]+kask(x-i)[1]==cutoff){ return x-i; } } } int find_best(int n) { mp.clear(); N=n; cutoff=0; for(int i = 0;i<min(n,474);i++){ if(kask(i)[0]+kask(i)[1]>cutoff){ cutoff=kask(i)[0]+kask(i)[1]; } } queue<array<int,3>>q; int mid = locate(n/2); q.push({0,mid-1,kask(mid)[0]}); q.push({mid+1,n-1,kask(mid)[1]}); if(kask(mid)[0]==0&&kask(mid)[1]==0){ return mid; } while(!q.empty()){ array<int,3>a = q.front(); q.pop(); if(a[2]==0) continue; if(abs(a[2]-(a[1]-a[0]))<2){ for(int i = a[0];i<=a[1];i++){ if(kask(i)[0]+kask(i)[1]==0){ return i; } } } int l = locate(a[0]-1); int r = locate(a[1]+1); int mid=locate((l+r)/2); q.push({l,mid,kask(mid)[0]-kask(l)[0]}); q.push({mid,r,kask(r)[0]-kask(mid)[0]}); } return -1; }

Compilation message (stderr)

prize.cpp: In function 'int locate(int)':
prize.cpp:33:1: warning: control reaches end of non-void function [-Wreturn-type]
   33 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...