Submission #40402

# Submission time Handle Problem Language Result Execution time Memory
40402 2018-01-31T21:19:57 Z MladenP The Big Prize (IOI17_prize) C++14
100 / 100
28 ms 3580 KB
#include "prize.h"
#include <bits/stdc++.h>
#define pii pair<int,int>
#define MAXN 200010
#define SQRT 500
#define fi first
#define se second
using namespace std;
int max_type, N, R, key;
pii dp[MAXN];
vector<int> ask1(int idx) {
    if(dp[idx] != make_pair(0, 0)) {
        vector<int> rez(2);
        rez[0] = dp[idx].fi;
        rez[1] = dp[idx].se;
        return rez;
    }
    vector<int> rez = ask(idx);
    dp[idx] = {rez[0], rez[1]};
    return rez;
}
pii nadji_sled(int l, int r) {
    int rez = N;
    while(l <= r) {
        int mid = (l+r)/2;
        vector<int> r1 = ask1(mid);
        if(r1[0]+r1[1] > max_type) {
            rez = mid;
            r = mid-1;
        }
        else if(r1[0]+r1[1] < max_type) {
                if(r1[0]+r1[1] == 0) return {1, mid};
                rez = mid,
                r = mid-1;
        }
        else if(r1[0] > key) r = mid-1;
        else l = mid+1;
    }
    vector<int> r1 = ask1(rez);
    if(r1[0]+r1[1] > max_type) {
        max_type = r1[0]+r1[1];
        key = r1[0]-1;
    }
    return {0,rez};
}
bool prazno(int L, int R) {
    vector<int> r = ask1(R);
    if(r[0]+r[1] < max_type) return false;
    if(r[0] > key) return false;
    return true;
}
int find_best(int n) {
    int za_max = min(n, 25);
    N = n;
    for(int i = 0; i < za_max; i++) {
        vector<int> r = ask1(i);
        int cur_ask = r[0] + r[1];
        if(cur_ask == 0) return i;
        max_type = max(max_type, cur_ask);
    }
    int tr = -1;
    int posl_tr = -1;
    int L = 0, R = min(n-1, SQRT);
    while(tr < n) {
        if(!prazno(L, R)) {
            pii sled1 = nadji_sled(L, R);
            if(sled1.fi == 1) return sled1.se;
            int sled = sled1.se;
            key++;
            tr = sled;
            L = sled1.se+1;
        }
        else L = R; R = L + SQRT;
        L = min(L, n-1), R = min(R, n-1);
    }
}

Compilation message

prize.cpp: In function 'int find_best(int)':
prize.cpp:62:9: warning: unused variable 'posl_tr' [-Wunused-variable]
     int posl_tr = -1;
         ^
prize.cpp:76:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# Verdict Execution time Memory Grader output
1 Correct 3 ms 3580 KB Output is correct
2 Correct 4 ms 3580 KB Output is correct
3 Correct 0 ms 3580 KB Output is correct
4 Correct 5 ms 3580 KB Output is correct
5 Correct 0 ms 3580 KB Output is correct
6 Correct 0 ms 3580 KB Output is correct
7 Correct 3 ms 3580 KB Output is correct
8 Correct 6 ms 3580 KB Output is correct
9 Correct 3 ms 3580 KB Output is correct
10 Correct 1 ms 3580 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3580 KB Output is correct
2 Correct 3 ms 3580 KB Output is correct
3 Correct 2 ms 3580 KB Output is correct
4 Correct 2 ms 3580 KB Output is correct
5 Correct 6 ms 3580 KB Output is correct
6 Correct 0 ms 3580 KB Output is correct
7 Correct 0 ms 3580 KB Output is correct
8 Correct 5 ms 3580 KB Output is correct
9 Correct 0 ms 3580 KB Output is correct
10 Correct 2 ms 3580 KB Output is correct
11 Correct 4 ms 3580 KB Output is correct
12 Correct 2 ms 3580 KB Output is correct
13 Correct 3 ms 3580 KB Output is correct
14 Correct 5 ms 3580 KB Output is correct
15 Correct 12 ms 3580 KB Output is correct
16 Correct 4 ms 3580 KB Output is correct
17 Correct 1 ms 3580 KB Output is correct
18 Correct 11 ms 3580 KB Output is correct
19 Correct 1 ms 3580 KB Output is correct
20 Correct 13 ms 3580 KB Output is correct
21 Correct 0 ms 3580 KB Output is correct
22 Correct 10 ms 3580 KB Output is correct
23 Correct 2 ms 3580 KB Output is correct
24 Correct 1 ms 3580 KB Output is correct
25 Correct 3 ms 3580 KB Output is correct
26 Correct 15 ms 3580 KB Output is correct
27 Correct 1 ms 3580 KB Output is correct
28 Correct 5 ms 3580 KB Output is correct
29 Correct 6 ms 3580 KB Output is correct
30 Correct 15 ms 3580 KB Output is correct
31 Correct 1 ms 3580 KB Output is correct
32 Correct 3 ms 3580 KB Output is correct
33 Correct 0 ms 3580 KB Output is correct
34 Correct 8 ms 3580 KB Output is correct
35 Correct 1 ms 3580 KB Output is correct
36 Correct 5 ms 3580 KB Output is correct
37 Correct 0 ms 3580 KB Output is correct
38 Correct 1 ms 3580 KB Output is correct
39 Correct 3 ms 3580 KB Output is correct
40 Correct 3 ms 3580 KB Output is correct
41 Correct 7 ms 3580 KB Output is correct
42 Correct 8 ms 3580 KB Output is correct
43 Correct 17 ms 3580 KB Output is correct
44 Correct 4 ms 3580 KB Output is correct
45 Correct 0 ms 3580 KB Output is correct
46 Correct 1 ms 3580 KB Output is correct
47 Correct 1 ms 3580 KB Output is correct
48 Correct 0 ms 3580 KB Output is correct
49 Correct 1 ms 3580 KB Output is correct
50 Correct 13 ms 3580 KB Output is correct
51 Correct 3 ms 3580 KB Output is correct
52 Correct 1 ms 3580 KB Output is correct
53 Correct 0 ms 3580 KB Output is correct
54 Correct 4 ms 3580 KB Output is correct
55 Correct 0 ms 3580 KB Output is correct
56 Correct 7 ms 3580 KB Output is correct
57 Correct 5 ms 3580 KB Output is correct
58 Correct 13 ms 3580 KB Output is correct
59 Correct 2 ms 3580 KB Output is correct
60 Correct 1 ms 3580 KB Output is correct
61 Correct 4 ms 3580 KB Output is correct
62 Correct 0 ms 3580 KB Output is correct
63 Correct 4 ms 3580 KB Output is correct
64 Correct 6 ms 3580 KB Output is correct
65 Correct 2 ms 3580 KB Output is correct
66 Correct 4 ms 3580 KB Output is correct
67 Correct 2 ms 3580 KB Output is correct
68 Correct 1 ms 3580 KB Output is correct
69 Correct 4 ms 3580 KB Output is correct
70 Correct 6 ms 3580 KB Output is correct
71 Correct 3 ms 3580 KB Output is correct
72 Correct 4 ms 3580 KB Output is correct
73 Correct 11 ms 3580 KB Output is correct
74 Correct 9 ms 3580 KB Output is correct
75 Correct 3 ms 3580 KB Output is correct
76 Correct 10 ms 3580 KB Output is correct
77 Correct 10 ms 3580 KB Output is correct
78 Correct 1 ms 3580 KB Output is correct
79 Correct 4 ms 3580 KB Output is correct
80 Correct 10 ms 3580 KB Output is correct
81 Correct 28 ms 3580 KB Output is correct
82 Correct 2 ms 3580 KB Output is correct
83 Correct 4 ms 3580 KB Output is correct
84 Correct 20 ms 3580 KB Output is correct
85 Correct 13 ms 3580 KB Output is correct
86 Correct 5 ms 3580 KB Output is correct
87 Correct 2 ms 3580 KB Output is correct
88 Correct 4 ms 3580 KB Output is correct
89 Correct 3 ms 3580 KB Output is correct
90 Correct 5 ms 3580 KB Output is correct
91 Correct 1 ms 3580 KB Output is correct
92 Correct 1 ms 3580 KB Output is correct
93 Correct 2 ms 3580 KB Output is correct
94 Correct 1 ms 3580 KB Output is correct
95 Correct 1 ms 3580 KB Output is correct
96 Correct 2 ms 3580 KB Output is correct
97 Correct 2 ms 3580 KB Output is correct