#include <bits/stdc++.h>
#include "koala.h"
using namespace std;
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.
int B[100]={0}, R[100]={0};
B[0] = 1;
playRound(B, R);
for (int i=0;i<N;i++) if (B[i]>=R[i]) return i;
return 0;
}
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.
int B[100] = {0}, R[100] = {0};
for (int i=0;i<N;i++) B[i] = 1;
playRound(B, R);
int prv = 1;
for (int z=1;z<4;z++){
int cnt=0;
for (int i=0;i<N;i++) if (R[i]>prv) cnt++;
for (int i=0;i<N;i++){
if (R[i]<=prv) B[i] = 0;
else B[i] = W/cnt;
}
prv = W/cnt;
playRound(B, R);
}
for (int i=0;i<N;i++) if (R[i]==12) return i;
assert(0);
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.
int B[100] = {0}, R[100] = {0};
B[0] = B[1] = 4;
playRound(B, R);
if (min(R[0], R[1])>=5){
B[0] = B[1] = 8;
playRound(B, R);
if (R[0]>R[1]) return 0;
return 1;
}
else if (max(R[0], R[1])<=4){
B[0] = B[1] = 2;
playRound(B, R);
assert(R[0]<=2 || R[1]<=2);
if (R[0]<=2 && R[1]<=2){
B[0] = 1, B[1] = 0;
playRound(B, R);
if (B[0]>=R[0]) return 1;
return 0;
}
if (R[0]>2) return 0;
return 1;
}
if (R[0]>4) return 0;
return 1;
}
void dnc(int l, int r, vector<int> &v, int *P){
//printf("%d %d\n", l, r);
assert(l<=r);
if (l==r){
P[v[0]] = l; return;
}
int cur = 1;
int B[100] = {0}, R[100] = {0};
while(true){
cur++;
for (auto &x:v) B[x]++;
int idx = r, val=0;
for (;idx>=l;idx--){
if (val+cur>r-l+1) break;
val += cur;
}
int pt1=1, pt2=idx;
for (;pt1+cur-1<l && pt2>=l;pt1 += cur, pt2--){
int tmp = 0;
for (int i=0;i<cur-1;i++) tmp += pt1+i;
if (tmp>=pt2)break;
}
if (pt2>=l) break;
}
//printf("%d\n", B[v[0]]);
//for (int i=0;i<100;i++) printf("%d ", B[i]);
//printf("\n");
playRound(B, R);
//for (int i=0;i<100;i++) printf("%d ", R[i]);
//printf("\n");
vector<int> v1, v2;
for (auto &x:v){
if (R[x]>B[x]) v2.push_back(x);
else v1.push_back(x);
}
dnc(l, l+v1.size()-1, v1, P);
dnc(l+v1.size(), r, v2, P);
}
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.
bool chk[100] = {0};
int B[100] = {0}, R[100] = {0};
for (int k=N;k>=2;k--){
for (int i=0;i<N;i++) B[i] = 0;
int prv = W/k;
for (int i=0;i<N;i++) if (!chk[i]) B[i] = prv;
playRound(B, R);
while(true){
int cnt=0;
for (int i=0;i<N;i++) if (R[i]>prv) cnt++;
assert(cnt);
if (cnt==1){
for (int i=0;i<N;i++) if (R[i]>prv) P[i] = k, chk[i] = 1;
break;
}
for (int i=0;i<N;i++){
if (R[i]>prv) B[i] = W/cnt;
else B[i] = 0;
}
playRound(B, R);
}
}
for (int i=0;i<N;i++) if (!chk[i]) P[i] = 1;
} else {
// TODO: Implement Subtask 5 solution here.
// You may leave this block unmodified if you are not attempting this
// subtask.
int B[100] = {0}, R[100] = {0};
for (int i=0;i<N;i++) P[i] = 0;
for (int z=1;z<=50;z++){
int cnt=0;
for (int i=0;i<N;i++){
if (P[i]) B[i] = 1;
else if (cnt<z) B[i] = 1, cnt++;
}
playRound(B, R);
for (int i=0;i<N;i++) if (!P[i] && R[i]<=B[i]) P[i] = z;
}
vector<int> v;
for (int i=0;i<N;i++) if (!P[i]) v.push_back(i);
dnc(51, 100, v, P);
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
200 KB |
Output is correct |
2 |
Correct |
6 ms |
316 KB |
Output is correct |
3 |
Correct |
5 ms |
200 KB |
Output is correct |
4 |
Correct |
5 ms |
200 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
316 KB |
Output is correct |
2 |
Correct |
14 ms |
200 KB |
Output is correct |
3 |
Correct |
15 ms |
308 KB |
Output is correct |
4 |
Correct |
14 ms |
200 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
65 ms |
312 KB |
Output is correct |
2 |
Correct |
67 ms |
200 KB |
Output is correct |
3 |
Correct |
65 ms |
312 KB |
Output is correct |
4 |
Correct |
67 ms |
436 KB |
Output is correct |
5 |
Correct |
66 ms |
312 KB |
Output is correct |
6 |
Correct |
66 ms |
324 KB |
Output is correct |
7 |
Correct |
64 ms |
320 KB |
Output is correct |
8 |
Correct |
69 ms |
324 KB |
Output is correct |
9 |
Correct |
71 ms |
316 KB |
Output is correct |
10 |
Correct |
64 ms |
320 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
39 ms |
200 KB |
Output is correct |
2 |
Correct |
39 ms |
284 KB |
Output is correct |
3 |
Correct |
41 ms |
200 KB |
Output is correct |
4 |
Correct |
39 ms |
288 KB |
Output is correct |
5 |
Correct |
39 ms |
200 KB |
Output is correct |
6 |
Correct |
39 ms |
320 KB |
Output is correct |
7 |
Correct |
41 ms |
284 KB |
Output is correct |
8 |
Correct |
42 ms |
200 KB |
Output is correct |
9 |
Correct |
39 ms |
200 KB |
Output is correct |
10 |
Correct |
39 ms |
284 KB |
Output is correct |
11 |
Correct |
39 ms |
200 KB |
Output is correct |
12 |
Correct |
44 ms |
284 KB |
Output is correct |
13 |
Correct |
39 ms |
200 KB |
Output is correct |
14 |
Correct |
39 ms |
200 KB |
Output is correct |
15 |
Correct |
41 ms |
200 KB |
Output is correct |
16 |
Correct |
39 ms |
200 KB |
Output is correct |
17 |
Correct |
38 ms |
200 KB |
Output is correct |
18 |
Correct |
38 ms |
304 KB |
Output is correct |
19 |
Correct |
38 ms |
200 KB |
Output is correct |
20 |
Correct |
39 ms |
200 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
200 KB |
Output is correct |
2 |
Correct |
4 ms |
200 KB |
Output is correct |
3 |
Correct |
4 ms |
200 KB |
Output is correct |
4 |
Correct |
4 ms |
308 KB |
Output is correct |
5 |
Correct |
4 ms |
200 KB |
Output is correct |
6 |
Correct |
4 ms |
200 KB |
Output is correct |
7 |
Correct |
6 ms |
308 KB |
Output is correct |
8 |
Correct |
4 ms |
200 KB |
Output is correct |
9 |
Correct |
4 ms |
200 KB |
Output is correct |
10 |
Correct |
4 ms |
200 KB |
Output is correct |
11 |
Correct |
4 ms |
200 KB |
Output is correct |
12 |
Correct |
4 ms |
200 KB |
Output is correct |
13 |
Correct |
4 ms |
200 KB |
Output is correct |
14 |
Correct |
4 ms |
200 KB |
Output is correct |
15 |
Correct |
4 ms |
200 KB |
Output is correct |
16 |
Correct |
4 ms |
200 KB |
Output is correct |
17 |
Correct |
4 ms |
200 KB |
Output is correct |
18 |
Correct |
4 ms |
200 KB |
Output is correct |
19 |
Correct |
4 ms |
308 KB |
Output is correct |
20 |
Correct |
4 ms |
200 KB |
Output is correct |
21 |
Correct |
4 ms |
200 KB |
Output is correct |
22 |
Correct |
4 ms |
200 KB |
Output is correct |
23 |
Correct |
4 ms |
200 KB |
Output is correct |
24 |
Correct |
4 ms |
200 KB |
Output is correct |
25 |
Correct |
5 ms |
200 KB |
Output is correct |
26 |
Correct |
4 ms |
200 KB |
Output is correct |
27 |
Correct |
4 ms |
304 KB |
Output is correct |
28 |
Correct |
4 ms |
200 KB |
Output is correct |
29 |
Correct |
4 ms |
200 KB |
Output is correct |
30 |
Correct |
4 ms |
200 KB |
Output is correct |
31 |
Correct |
4 ms |
200 KB |
Output is correct |
32 |
Correct |
4 ms |
200 KB |
Output is correct |
33 |
Correct |
4 ms |
200 KB |
Output is correct |
34 |
Correct |
4 ms |
200 KB |
Output is correct |
35 |
Correct |
4 ms |
200 KB |
Output is correct |
36 |
Correct |
4 ms |
200 KB |
Output is correct |
37 |
Correct |
4 ms |
200 KB |
Output is correct |
38 |
Correct |
4 ms |
200 KB |
Output is correct |
39 |
Correct |
4 ms |
200 KB |
Output is correct |
40 |
Correct |
4 ms |
200 KB |
Output is correct |