Submission #1366918

#TimeUsernameProblemLanguageResultExecution timeMemory
1366918jumpKoala Game (APIO17_koala)C++20
47 / 100
27 ms464 KiB
#include "koala.h"
#include <bits/stdc++.h>
int parr[110];
int res[110];
int ans[110];
int NG,NW,PH;
int call=1;
int theres=13;
void play(){
    // while(call>theres);
    // std::cout << "in";
    // for(int i=0;i<NG;i++)std::cout << parr[i];
    // std::cout << '\n';
    //std::cout << call;
    playRound(parr,res);
    // std::cout << "out";
    // for(int i=0;i<NW;i++)std::cout << res[i];
    // std::cout << '\n';
    //++call;
    //std::cin >> PH;
}
int minValue(int N, int W) {
    NG=N,NW=W;
    parr[0]=1;
    play();
    if(res[0]<2)return 0;
    for(int i=1;i<N;i++){
        if(res[i]==0)return i;
    }
    return 0;
}
/*
1 1   
10 10
2 1 3 4 5 6 7 8 9 10
*/
/*
1 1   
10 10
10 3 2 4 5 6 7 8 9 1
*/
int maxValue(int N, int W) {
    NG=N,NW=W;
    for(int i=0;i<N;i++){
        parr[i]=0;
        res[i]=0;
    }
    bool notans[105];
    for(int i=0;i<N;i++){
        notans[i]=false;
    }
    int cnt=N;
    int t=0;
    std::vector<int> precalcN={1,2,4,11,14,14,14,14,14,14,14};
    while(cnt>1){
        //std::cout << cnt << ' ';
        for(int i=0;i<N;i++){
            if(notans[i])parr[i]=0;
            else parr[i]=precalcN[t];
        }
        play();
        for(int i=0;i<N;i++){
            if(notans[i])continue;
            if(parr[i]>=res[i])cnt-=1,notans[i]=true;
        }
        t++;
        //std::cout << cnt << '|';
    }
    for(int i=0;i<N;i++)if(!notans[i])return i;
    return 0;
}
/*
2 1   
10 10
10 3 2 4 5 6 7 8 9 1
*/
/*
2 1   
100 100
21 10 39 58 46 91 67 40 99 53 71 89 48 78 16 38 81 28 2 34 45 8 88 54 55 42 11 93 74 84 32 20 56 44 17 29 92 96 26 30 69 57 97 5 85 27 95 35 98 24 25 63 15 41 49 13 47 83 31 72 6 37 22 75 61 59 43 94 52 65 73 51 7 70 19 87 64 36 3 77 86 62 33 79 18 76 60 100 82 9 1 23 4 14 80 66 68 12 50 90
*/
/*
2 1   
100 100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
*/

int greaterValue(int N, int W) {
    NG=N,NW=W;
    int l=1,r=9;
    while(l!=r){
        int mid=(l+r)/2;
        parr[0]=mid,parr[1]=mid;
        play();
        if (res[0] > mid && res[1] > mid) l = mid + 1;
		else if (res[0] <= mid && res[1] <= mid) r = mid - 1;
		else return (res[0] < res[1]);
    }
    parr[0] = parr[1] = l;
	play();
	return (res[0] < res[1]);
}
/*
3 1   
100 100
2 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
*/
/*
3 1   
100 100
2 100 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1
*/
void split(const std::vector<int>& v,int N,int W,int *P,int l=1,int r=100){
    if(l==r)P[v[0]]=l;
    else{
        int x= std::min((int)(std::sqrt(2*l)),W/(r-l+1));
        for(int i=0;i<NG;i++)parr[i]=0;
        for(auto num:v)parr[num]=x;
        play();
        std::vector<int> less, greater;
		for (int i : v)
			if (res[i] > x) greater.push_back(i);
			else less.push_back(i);
        split(less, N, W, P, l, l + less.size() - 1);
		split(greater, N, W, P, r - greater.size() + 1, r);
    }
}
void allValues(int N, int W, int *P) {
    NG=N,NW=W;
    if (W == 2*N) {
        for(int i=0;i<N;i++)P[i]=-1;
        for(int l=0;l<N-1;l++){
            //std::cout << '-' << l << ':' << '\n';
            for(int i=0;i<N;i++){
                parr[i]=0;
                res[i]=0;
            }
            bool notRes[105];
            int cnt=N;
            for(int i=0;i<N;i++){
                notRes[i]=false;
                if(P[i]!=-1)cnt-=1,notRes[i]=true;
            }
            int t=0;
            while(cnt>1){
                for(int i=0;i<N;i++){
                    if(notRes[i])parr[i]=0;
                    //if(P[i]!=-1&&l!=0)parr[i]=100/(l);
                    else parr[i]=(W/(cnt));
                }
                //std::cout << '|' << cnt << "->";
                play();
                for(int i=0;i<N;i++){
                    if(notRes[i])continue;
                    if(parr[i]>=res[i])cnt-=1,notRes[i]=true;
                }
                t++;
            }
            bool found=false;
            for(int i=0;i<N;i++){
                if(!notRes[i]){
                    P[i]=N-l;
                    found=true;
                    //std::cout << i << "->" << N-l << '\n';
                    break;
                }
            }
            if(!found){
                std::cout << l << ' ';
                std::cin >> PH;
            }
            //std::cin >> PH;
        }
        for(int i=0;i<N;i++)if(P[i]==-1)P[i]=1;
        return;
    } else {
        std::vector<int> v;
        for(int i=0;i<N;i++)v.push_back(i);
        split(v,N,W,ans);
    }
}
/*
4 1   
100 200
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...