#include "koala.h"
#include <bits/stdc++.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int minValue(int N, int W) {
int n=N;
int tab[N];
int ans[N];
memset(tab,0,sizeof tab);
tab[0]=1;
playRound(tab,ans);
int res=-1;
for (int i = 0; i < n; ++i)
{
if(ans[i]==0) res=i;
}
if(res!=-1) return res;
tab[0]=0;
tab[1]=1;
playRound(tab,ans);
for (int i = 0; i < n; ++i)
{
if(ans[i]==0) res=i;
}
return res;
}
int maxValue(int N, int W) {
int n=N;
int tab[n];
int cur[n];
int still[n];
for (int i = 0; i < n; ++i) still[i]=1;
for (int i = 0; i < n; ++i) tab[i]=1;
int cnt=1;
int h[4]={1,2,4,12};
while(cnt<5){
playRound(tab,cur);
for (int i = 0; i < n; ++i)
{
if(cur[i]>h[cnt-1]) still[i]=1;
else still[i]=0;
if(still[i]==1) tab[i]=h[cnt];
else tab[i]=0;
}
cnt++;
}
int res;
for (int i = 0; i < n; ++i)
{
if(still[i]==1) res=i;
}
return res;
}
int greaterValue(int N, int W) {
int tab[100];
memset(tab,0,sizeof tab);
int cur[100];
int l=1;
int r=min(N/2+1,9);
while(r>=l){
int mid=(r+l)/2;
tab[0]=mid;
tab[1]=mid;
playRound(tab,cur);
if(cur[0]<=mid&&cur[1]<=mid) r=mid-1;
else l=mid+1;
if(cur[0]<=mid&&cur[1]>mid) return 1;
if(cur[1]<=mid&&cur[0]>mid) return 0;
}
/*tab[0]=l;
tab[1]=l;
playRound(tab,cur);
if(cur[0]<=l&&cur[1]>l) return 1;
if(cur[1]<=l&&cur[0]>l) return 0;*/
}
bool compare(int N,int i,int j){
int tab[N];
int cur[N];
memset(tab,0,sizeof tab);
tab[i]=N;
tab[j]=N;
playRound(tab,cur);
return (cur[i]>N ? 1 : 0);
}
vector<int> mergesort(int N,int l,int r){
if(l>r) return{};
if(l==r) {
return {l};
}
int mid=(r+l)/2;
vector<int> a=mergesort(N,l,mid);
vector<int> b=mergesort(N,mid+1,r);
vector<int> cur;
int j=0;
for (int i = 0; i < a.size(); ++i)
{
while(j<b.size()&&compare(N,a[i],b[j])==1) cur.push_back(b[j++]);
cur.push_back(a[i]);
}
while(j<b.size()) cur.push_back(b[j++]);
return cur;
}
bool cmp(int N,int i,int j){
int tab[N];
memset(tab,0,sizeof tab);
int cur[N];
int l=1;
int r=min(N/2+1,9);
while(r-l>1){
int mid=(r+l)/2;
tab[i]=mid;
tab[j]=mid;
playRound(tab,cur);
if(cur[i]<=mid&&cur[j]<=mid) r=mid;
else l=mid;
if(cur[i]<=mid&&cur[j]>mid) return 0;
if(cur[j]<=mid&&cur[i]>mid) return 1;
}
tab[i]=l;
tab[j]=l;
playRound(tab,cur);
if(cur[i]<=l&&cur[j]>l) return 0;
if(cur[j]<=l&&cur[i]>l) return 1;
}
vector<int> merge(int N,int l,int r){
if(l>r) return{};
if(l==r) {
return {l};
}
int mid=(r+l)/2;
vector<int> a=merge(N,l,mid);
vector<int> b=merge(N,mid+1,r);
vector<int> cur;
int j=0;
for (int i = 0; i < a.size(); ++i)
{
while(j<b.size()&&cmp(N,a[i],b[j])==1) cur.push_back(b[j++]);
cur.push_back(a[i]);
}
while(j<b.size()) cur.push_back(b[j++]);
return cur;
}
void allValues(int N, int W, int *P) {
if (W == 2*N) {
vector<int> tab=mergesort(N,0,N-1);
for (int i = 0; i < N; ++i)
{
P[tab[i]]=i+1;
}
} else {
vector<int> tab=merge(N,0,N-1);
for (int i = 0; i < N; ++i)
{
P[tab[i]]=i+1;
}
}
}
Compilation message (stderr)
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:79:1: warning: control reaches end of non-void function [-Wreturn-type]
79 | }
| ^
koala.cpp: In function 'bool cmp(int, int, int)':
koala.cpp:129:1: warning: control reaches end of non-void function [-Wreturn-type]
129 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |