제출 #847921

#제출 시각아이디문제언어결과실행 시간메모리
847921ALeonidou로봇 대회 (IOI23_robot)C++17
26 / 100
98 ms6340 KiB
#include "robot.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

#define ll int
#define sz(x) (ll)x.size()
#define MID ((l+r)/2)
#define pb push_back
#define dbg(x) cout<<#x<<": "<<x<<endl;

typedef vector <ll> vi;
typedef pair <ll,ll> ii;
typedef vector <ii> vii;

void printVct(vi &v){
    for (ll i=0; i<sz(v); i++){
        cout<<v[i]<<" ";
    }
    cout<<endl;
}

/*
-2: Edge
-1: Wall
0: Empty
1: Final Correct
2: Initial Correct
3: Up
4: Right
5: Down
6: Left
*/

#define N 3
#define E 4
#define S 5
#define W 6

// ll mpri[4];
map <ll, char> mp;
// map <ll,char> mpr; 
void init_map(){
    mp[N] = 'N';
    mp[E] = 'E';
    mp[S] = 'S';
    mp[W] = 'W';
    // mpr[N] = 'S';
    // mpr[E] = 'W';
    // mpr[S] = 'N';
    // mpr[W] = 'E';
    // mpi[N] = S;
    // mpi[E] = W;
    // mpi[S] = N;
    // mpi[W] = E;
}

ll i,j,k,z,c;
void goToAnyNeighbourWithColor(ll color){
    if (i == 2){
        set_instruction({c, i, j, k, z}, W, 'W');
    }
    else if (j == 2){
        set_instruction({c, i, j, k, z}, S, 'S');
    }
    else if (k == 2){
        set_instruction({c, i, j, k, z}, E, 'E');
    }
    else if (z == 2){
        set_instruction({c, i, j, k, z}, N, 'N');
    }
}

bool goToNeighbourColorPriority(vi p, vi setColor){
    for (ll x = 0; x<sz(p); x++){
        if (i == p[x]){
            set_instruction({c, i, j, k, z}, setColor[x], 'W');
        }
        else if (j == p[x]){
            set_instruction({c, i, j, k, z}, setColor[x], 'S');
        }
        else if (k == p[x]){
            set_instruction({c, i, j, k, z}, setColor[x], 'E');
        }
        else if (z == p[x]){
            set_instruction({c, i, j, k, z}, setColor[x], 'N');
        }
        else{
            continue;
        }
        return true;
    }
    return false;
}

/*
if there is neighbour with correct colour, go
else go back to the square
*/

bool goToDirection(ll color, bool goAnyway){
    if (i == E){
        set_instruction({c,i,j,k,z}, color, 'W');
    }
    else if (j == N){
        set_instruction({c,i,j,k,z}, color, 'S');
    }
    else if (k == W){
        set_instruction({c,i,j,k,z}, color, 'E');
    }
    else if (z == S){
        set_instruction({c,i,j,k,z}, color, 'N');
    }
    else{
        if (goAnyway) 
            set_instruction({c,i,j,k,z}, 0, mp[color]); 
        return false;
    }
    return true;
}

void program_pulibot()
{
    init_map();
    for (c = 0; c<=6; c++){
        for (i = -2; i<=6; i++){
            for (j =-2; j<=6; j++){
                for (k = -2; k<=6; k++){
                    for (z = -2; z<=6; z++){

                        if (c >= 3){
                            goToDirection(c, true);
                        }
                        else if (i == 1 || j == 1 || k == 1 || z == 1){
                            if (i == -2 && z == -2){
                                if (!goToNeighbourColorPriority({3,4,5,6}, {2,2,2,2}))
                                    set_instruction({c, i, j, k, z}, 1, 'T');
                            }
                            else{
                                if (!goToDirection(c, false)){
                                    goToNeighbourColorPriority({2,1}, {1,0});
                                }
                                // goToNeighbourColorPriority({6,5,4,3,2,1}, {1,1,1,1,1,0})
                                // goToNeighbourColorPriority({3,2,1}, {1,1,0});
                            }
                        }
                        else{
                            if (k == -2 && j == -2){
                                goToNeighbourColorPriority({2}, {1});
                            }
                            else if (k == 0){
                                set_instruction({c, i, j, k, z}, 2, 'E');
                            }
                            else if (j == 0){
                                set_instruction({c, i, j, k, z}, 2, 'S');
                            }
                            else{
                                goToAnyNeighbourWithColor(2);
                            }
                        }
                    }
                }
            }
        }
    }
}















#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...