Submission #856215

#TimeUsernameProblemLanguageResultExecution timeMemory
856215Sorting로봇 대회 (IOI23_robot)C++17
0 / 100
0 ms348 KiB
#include "robot.h"
#include <vector>

using namespace std;

char get_dir(int color, int east, int west, int north, int south){
    char dir = 'X';
    if(east == color)dir = 'E';
    if(west == color)dir = 'W';
    if(north == color)dir = 'N';
    if(south == color)dir = 'S';
    return dir;
}

void set_from_states(int curr, int west, int south, int east, int north){
    vector<int> states{curr, west, south, east, north};
    if(east == -2 && south == -2){
        if(curr == 0){
            char dir = get_dir(1, east, west, north, south);
            set_instruction(states, 3, dir);
            return;
        }
        set_instruction(states, 1, 'T');
        return;
    }

    if(curr == 2){
         char dir = get_dir(2, east, west, north, south);

        if(dir != 'X'){
            set_instruction(states, 4, dir);
            return;
        }
        
        dir = get_dir(4, east, west, north, south);
        set_instruction(states, 0, dir);
        return;
    }
    if(curr == 4){
        char dir = get_dir(3, east, west, north, south);

        if(dir != 'X'){
            set_instruction(states, 0, dir);
            return;
        }

        dir = get_dir(4, east, west, north, south);
        set_instruction(states, 0, dir);
        return;
    }

    if(curr == 0){
        char dir = get_dir(0, east, west, north, south);

        if(dir != 'X'){
            set_instruction(states, 1, dir);
            return;
        }

        dir = get_dir(1, east, west, north, south);
        set_instruction(states, 2, dir);
        return;
    }
    if(curr == 1){
        int count_3 = 0;
        count_3 += east == 3;
        count_3 += west == 3;
        count_3 += north == 3;
        count_3 += south == 3;

        if(count_3){
            char dir = get_dir(2, east, west, north, south);

            if(dir != 'X'){
                set_instruction(states, 3, dir);
                return;
            }
            
            dir = get_dir(1, east, west, north, south);
            if(dir != 'X'){
                set_instruction(states, 3, dir);
            }
            else{
                set_instruction(states, 3, 'H');
            }
            return;
        }

        char dir = get_dir(0, east, west, north, south);

        if(dir != 'X'){
            set_instruction(states, 1, dir);
            return;
        }

        dir = get_dir(1, east, west, north, south);
        set_instruction(states, 2, dir);
        return;
    }
    if(curr == 3){
        char dir = get_dir(3, east, west, north, south);
        set_instruction(states, 1, dir);
        return;
    }
}

void program_pulibot()
{
    for(int curr = 0; curr <= 4; ++curr){
        for(int east = -2; east <= 4; ++east){
            for(int south = -2; south <= 4; ++south){
                for(int north = -2; north <= 4; ++north){
                    for(int west = -2; west <= 4; ++west){
                        set_from_states(curr, west, south, east, north);
                    }
                }
            }
        }
    }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...