#include "koala.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double D;
typedef pair<int,vector<int>> P;
typedef pair<ll,P> T;
#define M 1000000007
#define F first
#define S second
#define PB push_back
#define INF 1000000001
int n,b[105],r[105];
void ini(void){
for(int i=0;i<n;i++)b[i]=0;
}
int minValue(int N, int w) {
n=N;
ini();
b[0]=1;
playRound(b,r);
for(int i=0;i<n;i++)if(b[i]>=r[i])return i;
}
int maxValue(int N,int w) {
n=N;
vector<int>res;
for(int i=0;i<n;i++)res.PB(i);
while(res.size()>1){
ini();
for(int i=0;i<res.size();i++)b[res[i]]=w/res.size();
playRound(b,r);
res.clear();
for(int i=0;i<n;i++)if(b[i]>0&&b[i]<r[i])res.PB(i);
}
return res[0];
}
int greaterValue(int N, int w) {
n=N;
ini();
b[0]=4,b[1]=4;
playRound(b,r);
if(b[0]<r[0]){
if(b[1]>=r[1])return 0;
b[0]=7,b[1]=7;
playRound(b,r);
if(b[0]<r[0]&&b[1]<r[1]){
b[0]=8,b[1]=8;
playRound(b,r);
}
if(b[0]<r[0])return 0;
else return 1;
}else if(b[1]<r[1])return 1;
else{
b[0]=2,b[1]=2;
playRound(b,r);
if(b[0]>=r[0]&&b[1]>=r[1]){
b[0]=1,b[1]=1;
playRound(b,r);
}
if(b[0]<r[0])return 0;
else return 1;
}
}
bool grt(int x,int y){
ini();
b[x]=100,b[y]=100;
playRound(b,r);
return b[x]>=r[x];
}
vector<int> mrg(vector<int>x,vector<int>y){
vector<int>res;
int i=0,j=0;
while(i<x.size()&&j<y.size()){
if(grt(x[i],y[j]))res.PB(x[i++]);
else res.PB(y[j++]);
}
while(i<x.size())res.PB(x[i++]);
while(j<y.size())res.PB(y[j++]);
return res;
}
void allValues(int N, int w, int *p) {
n=N;
if(w==2*n){
vector<vector<int>>res;
for(int i=0;i<n;i++)res.PB(vector<int>{i});
while(res.size()>1){
vector<vector<int>>nw;
for(int i=0;i+1<res.size();i+=2){
nw.PB(mrg(res[i],res[i+1]));
}
if(res.size()%2==1)nw.PB(res.back());
res.clear();
res.insert(res.begin(),nw.begin(),nw.end());
}
for(int i=0;i<n;i++)p[res[0][i]]=i+1;
}else{
stack<P>res;
vector<int>o,e;
for(int i=0;i<n;i++)b[i]=1;
playRound(b,r);
for(int i=0;i<n;i++){
if(b[i]<r[i])e.PB(i);
else o.PB(i);
}
res.push(P(1,o));
res.push(P(o.size()+1,e));
while(!res.empty()){
int x=res.top().F;
o=res.top().S;
int s=o.size();
res.pop();
if(s==1){
p[o[0]]=x;
continue;
}
for(int i=1;i<=w;i++){
if(i*s>w)continue;
if(s<=i+1){
int q=0,c=i+1-s;
for(int j=1;j<=n&&c>=0;j++){
if(j<x||x+s-1<j){
q+=j;
c--;
}
}
if(x+s-1<=q)continue;
}
if((i+1)*s<=w){
int q=0,c=w-(i+1)*s+i+1;
for(int j=n;j>=1&&c>=0;j--){
if(j<x||x+s-1<j){
if(c<=i+1)q+=j;
c--;
}
}
if(x>q)continue;
}
ini();
for(int j=0;j<s;j++)b[o[j]]=i;
playRound(b,r);
vector<int>v,u;
for(int j=0;j<s;j++){
if(b[o[j]]<r[o[j]])u.PB(o[j]);
else v.PB(o[j]);
}
res.push(P(x,v));
res.push(P(x+v.size(),u));
}
}
}
}
Compilation message
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:31:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<res.size();i++)b[res[i]]=w/res.size();
~^~~~~~~~~~~
koala.cpp: In function 'std::vector<int> mrg(std::vector<int>, std::vector<int>)':
koala.cpp:75:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(i<x.size()&&j<y.size()){
~^~~~~~~~~
koala.cpp:75:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(i<x.size()&&j<y.size()){
~^~~~~~~~~
koala.cpp:79:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(i<x.size())res.PB(x[i++]);
~^~~~~~~~~
koala.cpp:80:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(j<y.size())res.PB(y[j++]);
~^~~~~~~~~
koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:90:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i+1<res.size();i+=2){
~~~^~~~~~~~~~~
koala.cpp: In function 'int minValue(int, int)':
koala.cpp:23:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
384 KB |
Output is correct |
2 |
Correct |
7 ms |
384 KB |
Output is correct |
3 |
Correct |
7 ms |
384 KB |
Output is correct |
4 |
Correct |
7 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
17 ms |
384 KB |
Output is correct |
2 |
Correct |
15 ms |
384 KB |
Output is correct |
3 |
Correct |
23 ms |
376 KB |
Output is correct |
4 |
Correct |
13 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
56 ms |
384 KB |
Output is correct |
2 |
Correct |
60 ms |
504 KB |
Output is correct |
3 |
Correct |
55 ms |
384 KB |
Output is correct |
4 |
Correct |
63 ms |
512 KB |
Output is correct |
5 |
Correct |
98 ms |
384 KB |
Output is correct |
6 |
Correct |
75 ms |
504 KB |
Output is correct |
7 |
Correct |
65 ms |
384 KB |
Output is correct |
8 |
Correct |
56 ms |
384 KB |
Output is correct |
9 |
Correct |
54 ms |
384 KB |
Output is correct |
10 |
Correct |
55 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
384 KB |
Output is correct |
2 |
Correct |
39 ms |
384 KB |
Output is correct |
3 |
Correct |
44 ms |
384 KB |
Output is correct |
4 |
Correct |
67 ms |
384 KB |
Output is correct |
5 |
Correct |
30 ms |
384 KB |
Output is correct |
6 |
Correct |
36 ms |
384 KB |
Output is correct |
7 |
Correct |
32 ms |
504 KB |
Output is correct |
8 |
Correct |
37 ms |
384 KB |
Output is correct |
9 |
Correct |
34 ms |
384 KB |
Output is correct |
10 |
Correct |
31 ms |
512 KB |
Output is correct |
11 |
Correct |
30 ms |
504 KB |
Output is correct |
12 |
Correct |
17 ms |
384 KB |
Output is correct |
13 |
Correct |
32 ms |
384 KB |
Output is correct |
14 |
Correct |
36 ms |
504 KB |
Output is correct |
15 |
Correct |
39 ms |
504 KB |
Output is correct |
16 |
Correct |
26 ms |
384 KB |
Output is correct |
17 |
Correct |
25 ms |
384 KB |
Output is correct |
18 |
Correct |
27 ms |
384 KB |
Output is correct |
19 |
Correct |
27 ms |
384 KB |
Output is correct |
20 |
Correct |
34 ms |
424 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
100 ms |
384 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |