Submission #1141438

#TimeUsernameProblemLanguageResultExecution timeMemory
1141438hyl_kibouCoins (IOI17_coins)C++17
50 / 100
5 ms584 KiB
#include "coins.h"

std::vector<int> coin_flips(std::vector<int> b, int c) {
    std::vector<int> flips;

    if(c<3){
        //0 1 2
        //8 9 10
        if(b[8]==b[9] && b[9]==b[10]){
            flips.push_back(8+c);
        }
        else if(b[8]==b[9]){
            if(c==2){
                flips.push_back(63);
            }
            else{
                flips.push_back(8+!c);
            }
        }
        else if(b[8]==b[10]){
            if(c==1){
                flips.push_back(63);
            }
            else{
                if(c==0){
                    flips.push_back(10);
                }
                else{
                    flips.push_back(8);
                }
            }
        }
        else{
            if(c==0){
                flips.push_back(63);
            }
            else{
                if(c==1){
                    flips.push_back(10);
                }
                else{
                    flips.push_back(9);
                }
            }
        }

        /*
        for(int x : flips){
            std::cout << x << ' ';
        }
        */

        return flips;
    }

    if(b[8] == b[9] && b[9]==b[10]){
        //
    }
    else if(b[8]==b[9]){
        flips.push_back(10);
    }
    else if(b[8]==b[10]){
        flips.push_back(9);
    }
    else{
        flips.push_back(8);
    }

    int a = c;
    int bin[8];

    for(int i = 0; i<6; ++i){
        bin[i] = a%2;
        a/=2;
    }

    int sum = b[0];

    for(int i = 1; i<=6; ++i){
        sum+= b[i]!=bin[i-1];
    }

    if(sum<4){
        if(b[0]){
            flips.push_back(0);
        }
        for(int i = 1; i<=6; ++i){
            if((b[i]!=bin[i-1])){
                flips.push_back(i);
            }
        }
    }
    else{
        if(!b[0]){
            flips.push_back(0);
        }
        for(int i = 1; i<=6; ++i){
            if((b[i]==bin[i-1])){
                flips.push_back(i);
            }
        }
    }

    if(flips.size()==0){
        flips.push_back(63);
    }

    return flips;
}

int find_coin(std::vector<int> b) {
    int sum = 0;
    int cat = 1;
    if(b[8]==b[9] && b[9]==b[10]){
        if (b[0] == 0) {
            for(int i = 1; i<=6; ++i){
                sum+= b[i]*cat;
                cat*=2;
            }
        }
        else{
            for(int i = 1; i<=6; ++i){
                sum+= (!b[i])*cat;
                cat*=2;
            }
        }
        return sum;
    }

    //std::cout <<b[8] <<b[9] <<b[10];

    if(b[8]==b[9]){
        return 2;
    }
    else if(b[8]==b[10]){
        return 1;
    }
    else{
        return 0;
    }
}
#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...