제출 #1189382

#제출 시각아이디문제언어결과실행 시간메모리
1189382Malix코알라 (APIO17_koala)C++20
47 / 100
35 ms460 KiB
#include "koala.h"
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef pair<int,int> pi;
typedef vector<pi> pii;
typedef tuple<ll,ll,ll> ti;
typedef vector<ll> li;
typedef vector<li> lii;
 
#define REP(i,a,b) for(int i=a;i<b;i++)
#define F first
#define S second
#define PB push_back
#define LSOne(s) ((s)&(-s))
 
ll INF=1000000000000000010;
int inf=1e9+10;
ll M=1e9+7;

int minValue(int N, int W) {
    int a[100],b[100];
    REP(i,1,100)a[i]=0;
    a[0]=1;
    playRound(a,b);
    int ans=0;
    REP(i,1,100)if(b[i]==0)ans=i;
    return ans;
}

int maxValue(int N, int W) {
    int a[100],b[100];
    REP(i,0,100)a[i]=1;
    playRound(a,b);
    memset(a,0,sizeof(a));
    REP(i,0,100)if(b[i]==2)a[i]=2;
    playRound(a,b);
    memset(a,0,sizeof(a));
    REP(i,0,100)if(b[i]==3)a[i]=4;
    playRound(a,b);
    memset(a,0,sizeof(a));
    REP(i,0,100)if(b[i]==5)a[i]=11;
    playRound(a,b);
    REP(i,0,100)if(b[i]==12)return i;
    return 0;
}

int greaterValue(int N, int W) {
    int a[100],b[100];
    int l=1,r=9;
    while(l!=r){
        int m=(l+r)/2;
        memset(a,0,sizeof(a));
        a[0]=m;a[1]=m;
        playRound(a,b);
        if(b[0]>b[1])return 0;
        if(b[0]<b[1])return 1;
        if(b[0]>m)l=m+1;
        else r=m-1;
    }
    a[0]=l;a[1]=l;
    playRound(a,b);
    if(b[0]>b[1])return 0;
    if(b[0]<b[1])return 1;
    return 0;
}

vi arr;

bool higher(int x,int y){
    int a[100],b[100];
    memset(a,0,sizeof(a));
    a[arr[x]]=100;a[arr[y]]=100;
    playRound(a,b);
    return b[arr[x]]<b[arr[y]];
}

void st(int l,int r){
    if(l==r)return;
    int m=(l+r)/2;
    st(l,m);
    st(m+1,r);
    vi b(arr.begin()+l,arr.begin()+r+1);
    int pos=0,t=l;
    REP(i,m+1,r+1){
        while(l<=m&&higher(l,i)){
            b[pos]=arr[l];
            pos++;l++;
        }
        b[pos]=arr[i];
        pos++;
    }
    REP(i,l,m+1){
        b[pos]=arr[i];
        pos++;
    }
    REP(i,t,r+1)arr[i]=b[i-t];
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        arr.resize(N);
        REP(i,0,N)arr[i]=i;
        st(0,N-1);
        REP(i,0,N)P[arr[i]]=i+1;
    } 
    else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}
#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...