답안 #70378

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
70378 2018-08-22T17:59:29 Z chpipis 커다란 상품 (IOI17_prize) C++11
20 / 100
1000 ms 6076 KB
#include "prize.h"
#include <bits/stdc++.h>

using namespace std;

typedef vector<int> vi;

const int MAXN = 2e5 + 5;
const int SIZE = 300;

int cnt[MAXN], num_q;
vi memo[MAXN];

vi query(int x) {
    if (memo[x].size() > 0)
        return memo[x];
    num_q++;
    vi ret = ask(x);
    return memo[x] = ret;
}

int find_best(int n) {
    memset(cnt, 0, sizeof cnt);
    fill(memo, memo + n + 1, vi());
    num_q = 0;
    /*
    int mx = -1;
    for (int i = 0, j; i < n; i = j + 1) {
        if (i == n - 1) return i;
        j = i;
        vi cur = query(i);
        if (cur[0] + cur[1] == 0) return i;
        if (cur[0] + cur[1] < mx) continue;
        mx = max(mx, cur[0] + cur[1]);
        int lo = i + 1, hi = n - 1;
        while (lo <= hi) {
            int mid = (lo + hi) >> 1;
            vi now = query(mid);
            if (now[0] + now[1] == 0) return mid;
            if (now == cur) {
                lo = mid + 1;
                j = mid;
            } else {
                hi = mid - 1;
            }
        }
    }
    */
    for (int i = 0; i < n; i++) {
        if (i == n - 1) return i;
        vi cur = query(i);
        int type = cur[0] + cur[1];
        if (type == 0) return i;
        cnt[type]++;
        int b;
        for (b = i / SIZE; (b + 1) * SIZE < n; b++) {
            if (query((b + 1) * SIZE) != cur)
                break;
        }
        int lo = max(i + 1, b * SIZE), hi = min(n - 1, (b + 1) * SIZE - 1);
        while (lo < hi) {
            int mid = (lo + hi) >> 1;
            vi now = query(mid);
            if (now == cur) {
                lo = mid + 1;
            } else {
                hi = mid;
            }
        }
        i = hi - 1;
    }
}



Compilation message

prize.cpp: In function 'int find_best(int)':
prize.cpp:72:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 5752 KB Output is correct
2 Correct 9 ms 5968 KB Output is correct
3 Correct 11 ms 5968 KB Output is correct
4 Correct 14 ms 5968 KB Output is correct
5 Correct 12 ms 5968 KB Output is correct
6 Correct 8 ms 5968 KB Output is correct
7 Correct 13 ms 6012 KB Output is correct
8 Correct 15 ms 6040 KB Output is correct
9 Correct 13 ms 6040 KB Output is correct
10 Correct 12 ms 6040 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6040 KB Output is correct
2 Correct 15 ms 6040 KB Output is correct
3 Correct 12 ms 6040 KB Output is correct
4 Correct 13 ms 6060 KB Output is correct
5 Correct 11 ms 6060 KB Output is correct
6 Correct 8 ms 6060 KB Output is correct
7 Correct 14 ms 6060 KB Output is correct
8 Correct 17 ms 6060 KB Output is correct
9 Correct 12 ms 6060 KB Output is correct
10 Correct 14 ms 6060 KB Output is correct
11 Correct 17 ms 6060 KB Output is correct
12 Correct 11 ms 6060 KB Output is correct
13 Correct 19 ms 6060 KB Output is correct
14 Correct 12 ms 6060 KB Output is correct
15 Correct 31 ms 6060 KB Output is correct
16 Execution timed out 1018 ms 6076 KB Time limit exceeded
17 Halted 0 ms 0 KB -