Submission #1069485

#TimeUsernameProblemLanguageResultExecution timeMemory
1069485vjudge1Robot Contest (IOI23_robot)C++17
88 / 100
179 ms15468 KiB
#include "robot.h" #include <bits/stdc++.h> using namespace std; enum Stat { BOUND = 1, BLOCK = 2, EMPTY = 4, PATH = 8, BRIGHT = 16, UP = 32, DOWN = 64, LEFT = 128, RIGHT = 256, BUP = 512, BDOWN = 1024, BLEFT = 2048, // special ANY = 4095, ANP = ANY & ~(EMPTY | PATH | BUP | BDOWN | BLEFT | BRIGHT), BAD = BOUND | BLOCK, INIT = BAD | EMPTY, }; enum Col { Bound = -2, Block, Empty, Path, BRight, Up, Down, Left, Right, BUp, BDown, BLeft, }; #define OPEN(v,i)\ for (int v = -2; v <= 10; ++v) {\ if (!((S[i]>>(v+2))&1)) continue; #define CLOS(v,i)\ } set<array<int,5>> seen; void si(array<int,5> S, Col Z, char A, bool exc = false) { OPEN(a,0) OPEN(b,1) OPEN(c,2) OPEN(d,3) OPEN(e,4) if (exc && c == Bound && d == Bound) continue; if (seen.count({a,b,c,d,e})) continue; set_instruction({a,b,c,d,e},Z,A); seen.insert({a,b,c,d,e}); CLOS(e,4) CLOS(d,3) CLOS(c,2) CLOS(b,1) CLOS(a,0) } void program_pulibot() { // init si({EMPTY,BOUND,INIT,INIT,BOUND},Left,'H',true); // cont si({LEFT,ANP,ANY&~(EMPTY|UP),ANY,ANY},Down,'H'); si({DOWN,ANY,ANP,ANY&~(EMPTY|LEFT),ANY},Right,'H'); si({RIGHT,ANY,ANY,ANP,ANY&~(EMPTY|DOWN)},Up,'H'); si({UP,ANY&~(EMPTY|RIGHT),ANY,ANY,ANP},Left,'H'); // traverse si({LEFT,ANP,UP,ANY,ANY},Down,'S'); si({DOWN,ANY,ANP,LEFT,ANY},Right,'E'); si({RIGHT,ANY,ANY,ANP,DOWN},Up,'N'); si({UP,RIGHT,ANY,ANY,ANP},Left,'W'); // explore si({LEFT,ANP,EMPTY,ANY,ANY},Down,'S'); si({DOWN,ANY,ANP,EMPTY,ANY},Right,'E'); si({RIGHT,ANY,ANY,ANP,EMPTY},Up,'N'); si({UP,EMPTY,ANY,ANY,ANP},Left,'W'); // new si({EMPTY,ANY&~RIGHT,ANY&~UP,ANY&~LEFT,DOWN},Up,'N',true); si({EMPTY,RIGHT,ANY&~UP,ANY&~LEFT,ANY&~DOWN},Left,'W',true); si({EMPTY,ANY&~RIGHT,UP,ANY&~LEFT,ANY&~DOWN},Down,'S',true); si({EMPTY,ANY&~RIGHT,ANY&~UP,LEFT,ANY&~DOWN},Right,'E',true); // found si({EMPTY,ANY,BOUND,BOUND,ANY},BUp,'H'); // done si({ANY,PATH,BOUND,BOUND,ANY},Path,'T'); si({ANY,ANY,BOUND,BOUND,PATH},Path,'T'); // cont si({BLEFT,ANY,ANY&~(UP|BUP),ANY,ANY},BDown,'H'); si({BDOWN,ANY,ANY,ANY&~(LEFT|BLEFT),ANY},BRight,'H'); si({BRIGHT,ANY,ANY,ANY,ANY&~(DOWN|BDOWN)},BUp,'H'); si({BUP,ANY&~(RIGHT|BRIGHT),ANY,ANY,ANY},BLeft,'H'); // trash path init si({BLEFT,BOUND,BUP,ANY&~BLEFT,BOUND},Path,'S'); si({BDOWN,BOUND,ANY&~BUP,BLEFT,BOUND},Path,'E'); // trash path si({BLEFT,PATH,BUP,ANY&~BLEFT,ANY&~BDOWN},Path,'S'); si({BLEFT,ANY&~BRIGHT,BUP,PATH,ANY&~BDOWN},Path,'S'); si({BLEFT,ANY&~BRIGHT,BUP,ANY&~BLEFT,PATH},Path,'S'); si({BDOWN,PATH,ANY&~BUP,BLEFT,ANY&~BDOWN},Path,'E'); si({BDOWN,ANY&~BRIGHT,PATH,BLEFT,ANY&~BDOWN},Path,'E'); si({BDOWN,ANY&~BRIGHT,ANY&~BUP,BLEFT,PATH},Path,'E'); si({BRIGHT,PATH,ANY&~BUP,ANY&~BLEFT,BDOWN},Path,'N'); si({BRIGHT,ANY&~BRIGHT,PATH,ANY&~BLEFT,BDOWN},Path,'N'); si({BRIGHT,ANY&~BRIGHT,ANY&~BUP,PATH,BDOWN},Path,'N'); si({BUP,BRIGHT,PATH,ANY&~BLEFT,ANY&~BDOWN},Path,'W'); si({BUP,BRIGHT,ANY&~BUP,PATH,ANY&~BDOWN},Path,'W'); si({BUP,BRIGHT,ANY&~BUP,ANY&~BLEFT,PATH},Path,'W'); // trash empty si({BLEFT,ANY&~BRIGHT,BUP,ANY&~BLEFT,ANY&~BDOWN},Empty,'S'); si({BDOWN,ANY&~BRIGHT,ANY&~BUP,BLEFT,ANY&~BDOWN},Empty,'E'); si({BRIGHT,ANY&~BRIGHT,ANY&~BUP,ANY&~BLEFT,BDOWN},Empty,'N'); si({BUP,BRIGHT,ANY&~BUP,ANY&~BLEFT,ANY&~BDOWN},Empty,'W'); // travs si({BUP,BRIGHT,BUP,ANY,ANY},BLeft,'W'); si({BUP,BRIGHT,ANY&~BUP,BLEFT,ANY},BLeft,'W'); si({BUP,BRIGHT,ANY&~BUP,ANY&~BLEFT,BDOWN},BLeft,'W'); si({BLEFT,ANY&~BRIGHT,BUP,BLEFT,ANY},BDown,'S'); si({BLEFT,ANY&~BRIGHT,BUP,ANY&~BLEFT,BDOWN},BDown,'S'); si({BDOWN,ANY&~BRIGHT,ANY&~BUP,BLEFT,BDOWN},BRight,'E'); // trav fix si({BLEFT,ANY,UP,ANY,ANY},BDown,'S'); si({BDOWN,ANY,ANY,LEFT,ANY},BRight,'E'); si({BRIGHT,ANY,ANY,ANY,DOWN},BUp,'N'); si({BUP,RIGHT,ANY,ANY,ANY},BLeft,'W'); // fix si({LEFT,BRIGHT,ANY,ANY,ANY},BLeft,'H'); si({DOWN,ANY,BUP,ANY,ANY},BDown,'H'); si({RIGHT,ANY,ANY,BLEFT,ANY},BRight,'H'); si({UP,ANY,ANY,ANY,BDOWN},BUp,'H'); // // shrink good // si({CAND,ANY&~RIGHT,BOUND,BOUND,DOWN},Path,'N'); // si({CAND,RIGHT,BOUND,BOUND,ANY&~DOWN},Path,'W'); // // cont shrink // si({LEFT,EMPTY|PATH,ANY,ANY,ANY},Cand,'H'); // si({DOWN,ANY,EMPTY|PATH,ANY,ANY},Cand,'H'); // si({RIGHT,ANY,ANY,EMPTY|PATH,ANY},Cand,'H'); // si({UP,ANY,ANY,ANY,EMPTY|PATH},Cand,'H'); // // shrink cont // si({CAND,ANY&~RIGHT,ANY&~UP,ANY&~LEFT,DOWN},Path,'N',true); // si({CAND,RIGHT,ANY&~UP,ANY&~LEFT,ANY&~DOWN},Path,'W',true); // si({CAND,ANY&~RIGHT,UP,ANY&~LEFT,ANY&~DOWN},Path,'S',true); // si({CAND,ANY&~RIGHT,ANY&~UP,LEFT,ANY&~DOWN},Path,'E',true); // // check // si({CAND,RIGHT,UP,ANY,ANY},Left,'W',true); // si({CAND,RIGHT,ANY&~UP,LEFT,ANY},Left,'W',true); // si({CAND,RIGHT,ANY&~UP,ANY&~LEFT,DOWN},Left,'W',true); // si({CAND,ANY&~RIGHT,UP,LEFT,ANY},Down,'S',true); // si({CAND,ANY&~RIGHT,UP,ANY&~LEFT,DOWN},Down,'S',true); // si({CAND,ANY&~RIGHT,ANY&~UP,LEFT,DOWN},Right,'E',true); // // extend // si({LEFT,PATH,ANY,ANY,ANY},Path,'H'); // si({DOWN,ANY,PATH,ANY,ANY},Path,'H'); // si({RIGHT,ANY,ANY,PATH,ANY},Path,'H'); // si({UP,ANY,ANY,ANY,PATH},Path,'H'); }
#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...