Submission #132716

# Submission time Handle Problem Language Result Execution time Memory
132716 2019-07-19T11:47:07 Z Talant The Big Prize (IOI17_prize) C++17
20 / 100
90 ms 24012 KB
#include "prize.h"
#include <bits/stdc++.h>

#define sc second
#define fr first
#define mk make_pair
#define pb push_back

using namespace std;

const int N = (1e6 + 5);
const int inf = (1e9 + 7);

vector <int> res[N];
int mx,cur;
int u[N];
vector <pair<int,int> > v;

int find_best(int n) {
      for (int i = min(n - 1,500); i >= 0; i --) {
            if (res[i].size() == 0)
            res[i] = ask(i);
            int s = res[i][0] + res[i][1];
            if (!s) return i;
            if (!u[s]) v.pb(mk(s,i)),u[s] = 1;
      }
      sort(v.rbegin(),v.rend());

      cur = min(v[0].sc,v[1].sc);

      while(1) {
            if (res[cur].size() == 0)
            res[cur] = ask(cur);
            if (res[cur][0] + res[cur][1] == 0) return cur;
            if (res[cur][0] + res[cur][1] != v[0].fr && res[cur][0] + res[cur][1] != v[1].fr) {
                  cur ++;
                  continue;
            }
            int lf = res[cur][0];
            int rt = res[cur][1];
            int l = cur,r = n - 1;
            while (r - l > 1) {
                  int m = (r + l) >> 1;
                  if (res[m].size() == 0)
                        res[m] = ask(m);
                  if (res[m][0] + res[m][1] == 0) return m;
                  if (res[m][0] == lf && res[m][1] == rt) l = m;
                  else r = m;
            }
            if (res[r].size() == 0)
            res[r] = ask(r);
            if (res[r][0] + res[r][1] == 0) return r;
            if (res[r][0] == lf && res[r][1] == rt) l = r;
            cur = l + 1;
      }
}
# Verdict Execution time Memory Grader output
1 Correct 29 ms 23800 KB Output is correct
2 Correct 28 ms 23800 KB Output is correct
3 Correct 29 ms 23804 KB Output is correct
4 Correct 28 ms 23800 KB Output is correct
5 Correct 29 ms 23716 KB Output is correct
6 Correct 29 ms 23800 KB Output is correct
7 Correct 29 ms 23716 KB Output is correct
8 Correct 26 ms 23816 KB Output is correct
9 Correct 27 ms 23816 KB Output is correct
10 Correct 27 ms 23800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 23800 KB Output is correct
2 Correct 27 ms 23816 KB Output is correct
3 Correct 26 ms 23944 KB Output is correct
4 Correct 26 ms 23944 KB Output is correct
5 Correct 29 ms 23844 KB Output is correct
6 Correct 29 ms 23804 KB Output is correct
7 Correct 27 ms 23948 KB Output is correct
8 Correct 29 ms 23800 KB Output is correct
9 Correct 28 ms 23940 KB Output is correct
10 Correct 28 ms 23824 KB Output is correct
11 Correct 32 ms 23800 KB Output is correct
12 Correct 29 ms 23720 KB Output is correct
13 Correct 34 ms 23800 KB Output is correct
14 Correct 31 ms 23800 KB Output is correct
15 Correct 49 ms 23828 KB Output is correct
16 Incorrect 90 ms 24012 KB Incorrect
17 Halted 0 ms 0 KB -