#include "koala.h"
#include<bits/stdc++.h>
using namespace std;
int minValue(int N, int W) {
int B[N], R[N];
for(int i=0; i<N; ++i) {
B[i] = R[i] = 0;
}
B[0] = 1;
playRound(B, R);
if(R[0]<=1) {
return 0;
}
for(int i=1; i<N; ++i) {
if(R[i]==0) return i;
}
}
int maxValue(int N, int W) {
int B[N] = {0}, R[N] = {0};
set<int>s;
for(int i=0; i<N; ++i) {
s.insert(i);
}
while(s.size()>1) {
int val = W / s.size();
memset(B, 0, sizeof B);
memset(R, 0, sizeof R);
for(int x : s) {
B[x] = val;
}
playRound(B, R);
set<int>new_s;
for(int i=0; i<N; ++i) if(R[i]>B[i]) {
if(s.count(i)) new_s.insert(i);
}
s = new_s;
}
return *s.begin();
}
int greaterValue(int N, int W) {
int B[N] = {0}, R[N] = {0};
int l = 1, r = 13;
while(l<r) {
int mid = (l+r+1)/2;
B[0] = B[1] = mid;
playRound(B, R);
if(B[0]<R[0] && B[1]<R[1]) {
l = mid;
} else if(B[0]>=R[0] && B[1]>=R[1]) {
r = mid-1;
} else {
if(R[0]>B[0]) return 0;
return 1;
}
}
}
void allValues(int N, int W, int *P) {
int B[N] = {0}, R[N] = {0};
if (W == 2*N) {
vector<vector<int>>grps(14);
for(int i=0; i<N; ++i) {
int l = 0, r = 13;
while(l<r) {
int mid = (l+r+1)/2;
B[i] = mid;
playRound(B, R);
if(R[i]>B[i]) {
l = mid;
} else {
r = mid-1;
}
B[i] = 0;
}
grps[l].push_back(i);
}
vector<int>order;
for(int i=0; i<14; ++i) {
vector<int>cur;
while(!grps[i].empty()) {
for(int j : grps[i]) {
B[j] = i;
}
playRound(B, R);
for(int j : grps[i]) {
if(R[j]>B[j]) {
cur.push_back(j);
}
B[j] = 0;
}
int x = cur.back();
int id = -1;
for(int j=0; j<grps[i].size(); ++j) {
if(grps[i][j]==x) id = j;
}
swap(grps[i].back(), grps[i][id]);
grps[i].pop_back();
if(grps[i].empty()) {
reverse(cur.begin(), cur.end());
for(int j : cur) {
order.push_back(j);
}
}
}
}
for(int i=0; i<N; ++i) {
P[order[i]] = i+1;
}
} 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 'void allValues(int, int, int*)':
koala.cpp:111:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
111 | for(int j=0; j<grps[i].size(); ++j) {
| ~^~~~~~~~~~~~~~~
koala.cpp: In function 'int minValue(int, int)':
koala.cpp:20:1: warning: control reaches end of non-void function [-Wreturn-type]
20 | }
| ^
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:70:1: warning: control reaches end of non-void function [-Wreturn-type]
70 | }
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
208 KB |
Output is correct |
2 |
Correct |
4 ms |
208 KB |
Output is correct |
3 |
Correct |
4 ms |
208 KB |
Output is correct |
4 |
Correct |
4 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
208 KB |
Output is correct |
2 |
Correct |
13 ms |
208 KB |
Output is correct |
3 |
Correct |
13 ms |
208 KB |
Output is correct |
4 |
Correct |
13 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
332 KB |
Output is correct |
2 |
Partially correct |
49 ms |
316 KB |
Output is partially correct |
3 |
Correct |
49 ms |
336 KB |
Output is correct |
4 |
Correct |
43 ms |
324 KB |
Output is correct |
5 |
Partially correct |
43 ms |
452 KB |
Output is partially correct |
6 |
Correct |
46 ms |
320 KB |
Output is correct |
7 |
Partially correct |
40 ms |
316 KB |
Output is partially correct |
8 |
Correct |
40 ms |
328 KB |
Output is correct |
9 |
Correct |
41 ms |
332 KB |
Output is correct |
10 |
Correct |
42 ms |
316 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
21 ms |
208 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
208 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |