제출 #1075589

#제출 시각아이디문제언어결과실행 시간메모리
1075589Abito커다란 상품 (IOI17_prize)C++17
20 / 100
58 ms3264 KiB
#include "prize.h" #include <bits/stdc++.h> #define int long long using namespace std; const int N=2e5+5; int ans[N][2],S; int32_t find_best(int32_t n) { int s=0,mx=0; for (int i=0;i<min(500,n);i++){ vector<int32_t> v=ask(i); ans[i][0]=v[0]; ans[i][1]=v[1]; if (v[0]+v[1]==0) return i; if (v[0]+v[1]>mx){ mx=v[0]+v[1]; s=i; } } int sq=sqrtl(n),mn=LLONG_MAX; for (int i=1;i<=n;i++){ int x=sq+(n-sq)/i+mx*i; if (x<mn) mn=x,S=i; } //cout<<s<<endl; for (int i=s;i+S<n;i+=S){ vector<int32_t> v=ask(i+S); ans[i+S][0]=v[0]; ans[i+S][1]=v[1]; if (v[0]+v[1]==0) return i+S; if (v[0]==ans[i][0] && v[1]==ans[i][1]) continue; for (int j=i+1;j<i+S;j++){ v=ask(j); ans[j][0]=v[0]; ans[j][1]=v[1]; if (v[0]+v[1]==0) return j; } } for (int i=max(0LL,n-S);i<n;i++){ vector<int32_t> v=ask(i); ans[i][0]=v[0]; ans[i][1]=v[1]; if (v[0]+v[1]==0) return i; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...