답안 #264823

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
264823 2020-08-14T10:13:28 Z srvlt 코알라 (APIO17_koala) C++14
4 / 100
6 ms 384 KB
#include "koala.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define all(x) begin(x), end(x)
#define SZ(x) (int)(x).size()
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int b[105], r[105];

int minValue(int N, int W) {
    // TODO: Implement Subtask 1 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    memset(& b, 0, sizeof(b));
    memset(& r, 0, sizeof(r));
    b[0] = 1;
    playRound(b, r);
    if (r[0] < 2) return 0;
    for (int i = 0; i < N; i++)
		if (r[i] == 0)
			return i;
	assert(false);
}

int maxValue(int N, int W) {
    // TODO: Implement Subtask 2 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    return 0;
}

int greaterValue(int N, int W) {
    // TODO: Implement Subtask 3 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    vector <int> suf, vec;
    for (int i = 0; i < N; i++)
		suf.pb(i);
    while (SZ(suf) > 2) {
		int k = min(N / SZ(suf), SZ(suf) - 1);
		memset(& b, 0, sizeof(b));
		memset(& r, 0, sizeof(r));
		for (int i : suf)
			b[i] = k;
		playRound(b, r);
		vec.clear();
		for (int i = 0; i < N; i++)
			if (b[i] == k && r[i] > k)
				vec.pb(i);
		suf = vec;
	}
	assert(SZ(suf) <= 2);
	if (SZ(suf) == 2) {
		int l = 1, h = N / 2 + 1;
		vector <int> tmp;
		while (l < h - 1) {
			int mid = l + h >> 1;
			memset(& b, 0, sizeof(b));
			memset(& r, 0, sizeof(r));
			b[suf[0]] = b[suf[1]] = mid;
			playRound(b, r);
			tmp.clear();
			if (r[suf[0]] > b[suf[0]]) tmp.pb(suf[0]);
			if (r[suf[1]] > b[suf[1]]) tmp.pb(suf[1]);
			if (SZ(tmp) > 0) l = mid;
			else h = mid;
		}
		memset(& b, 0, sizeof(b));
		memset(& r, 0, sizeof(r));
		b[suf[0]] = b[suf[1]] = l;
		playRound(b, r);
		tmp.clear();
		if (r[suf[0]] > b[suf[0]]) tmp.pb(suf[0]);
		if (r[suf[1]] > b[suf[1]]) tmp.pb(suf[1]);
		suf = tmp;
	}
	assert(SZ(suf) == 1);
    return suf[0];
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        // TODO: Implement Subtask 4 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    } else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}

Compilation message

koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:60:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   60 |    int mid = l + h >> 1;
      |              ~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 384 KB Output is correct
2 Correct 6 ms 384 KB Output is correct
3 Correct 6 ms 384 KB Output is correct
4 Correct 6 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -