제출 #136057

#제출 시각아이디문제언어결과실행 시간메모리
136057JustasZ커다란 상품 (IOI17_prize)C++14
0 / 100
108 ms400 KiB
#include "prize.h" #include <bits/stdc++.h> #define pb push_back #define all(a) a.begin(), a.end() #define sz(a) (int)a.size() #define x first #define y second #define debug(...) cout << "[" << #__VA_ARGS__ << ": " << __VA_ARGS__ << "]\n" #define rd() abs((int)rng()) using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int>pii; const int maxn = 2e5 + 100; const int mod = 1e9 + 7; mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); /*vector<int> ask(int i) { cout << "? " << i << endl; vector<int>a(2); cin >> a[0] >> a[1]; return a; }*/ int bl = 70; int find_best(int n) { vector<int>a, b; int mx = 0; for(int i = 0; i < min(n, bl); i++) { a = ask(i); if(a[0] + a[1] == 0) return i; mx = max(mx, a[0] + a[1]); } for(int i = bl; i < n; i += bl) { int j = min(i + bl - 1, n - 1); int p = i; a = ask(p); while(a[0] + a[1] != mx) { if(a[0] + a[1] == 0) return p; p++; if(p > j) break; a = ask(p); } a = ask(j); while(a[0] + a[1] != mx) { if(a[0] + a[1] == 0) return j; j--; if(j < p) break; a = ask(j); } if(p < j) { a = ask(p), b = ask(j); assert(a[0] + a[1] + b[0] + b[1] == 2 * mx); int between = b[0] - a[0]; if(between != 0) { int it = p + 1; while(it < j && between > 0) { a = ask(it); if(a[0] + a[1] != mx) { between--; if(a[0] + a[1] == 0) return it; } else { int l = it, r = j - 1; while(l < r) { int mid = (l + r) / 2; b = ask(mid); if(b[0] + b[1] != mx) r = mid; else { if(b[0] > a[0]) r = mid - 1; else l = mid + 1; } } it = l; a = ask(it); --between; if(a[0] + a[1] == 0) return it; } ++it; } } } } }

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

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