Submission #1180767

#TimeUsernameProblemLanguageResultExecution timeMemory
1180767MarwenElarbi코알라 (APIO17_koala)C++17
100 / 100
35 ms460 KiB
#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,11};
    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;
    }
}

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;
}
vector<int> arr(100);
void sorting(int l,int r,vector<int> v){
    if(l==r){
        arr[v[0]]=l;
        return;
    }
    int k=min(int(sqrt(2*l)),int(100/(r-l+1)));
    //cout <<k<<endl;
    int a[100];
    memset(a,0,sizeof a);
    int b[100];
    for (int i = 0; i < v.size(); ++i)
    {
        a[v[i]]=k;
    }
    playRound(a,b);
    vector<int> less;
    vector<int> greater;
    for (int i = 0; i < v.size(); ++i)
    {
        if(b[v[i]]>k) greater.push_back(v[i]);
        else less.push_back(v[i]);
    }
    sorting(l,l+less.size()-1,less);
    sorting(r-greater.size()+1,r,greater);
}

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> v(100);
        for (int i = 0; i < 100; ++i)
        {
            v[i]=i;
        }
        sorting(1,100,v);
        for (int i = 0; i < 100; ++i)
        {
            P[i]=arr[i];
        }
    }
}

Compilation message (stderr)

koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:74:1: warning: control reaches end of non-void function [-Wreturn-type]
   74 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...