제출 #842200

#제출 시각아이디문제언어결과실행 시간메모리
842200ainta로봇 대회 (IOI23_robot)C++17
44 / 100
501 ms8784 KiB
#include "robot.h" #include <bits/stdc++.h> using namespace std; #define rng(i,a,b) for(int i=int(a);i<=int(b);i++) #define rep(i,b) rng(i,0,b-1) #define gnr(i,b,a) for(int i=int(b);i>=int(a);i--) #define per(i,b) gnr(i,b-1,0) #define pb push_back #define eb emplace_back #define fi first #define se second #define bg begin() #define ed end() #define all(x) x.bg,x.ed #define si(x) int(x.size()) template<class t> using vc=vector<t>; template<class t> using vvc=vc<vc<t>>; typedef long long ll; using pii=pair<int,int>; using vi=vc<int>; using uint=unsigned; using ull=unsigned long long; using pil=pair<int,ll>; using pli=pair<ll,int>; using pll=pair<ll,ll>; using t3=tuple<int,int,int>; vi get_info(int a){ if(a==0)return {0,0,0}; if(a>=2){ a-=2; return {a%3, (a%6)/3, a/6}; } return {-1,-1,-1}; } int get_parent(vi T){ rep(i,4){ if(2<=T[i]){ if(get_info(T[i])[2])return i; } } return -1; } int from_v(vi Z){ return (Z[0] + Z[1]*3 + Z[2]*6)+2; } int get_ch(int a, vi T){ auto vv = get_info(a); vi Ch; rep(i,4){ if(T[i]==0) return i; if(T[i]>=2){ auto v = get_info(T[i]); if(v[1]!=vv[1] && (vv[0]+1)%3==v[0]){ return i; } } } return -1; } void program_pulibot() { rng(i,0,14){ rng(j,-2,14){ rng(k,-2,14){ rng(l,-2,14){ rng(m,-2,14){ vi T={j,k,l,m}; if(m==-2 && j==-2){ // start if(i==0){ int c = from_v({0,1,1}); int nt = get_ch(c,T); if(nt>=0){ set_instruction({i,j,k,l,m}, c, "WSEN"[nt]); } } else{ if(j==1||k==1||l==1||m==1){ set_instruction({i,j,k,l,m}, 1, 'T'); } else{ int nt = get_ch(i,T); if(nt>=0){ set_instruction({i,j,k,l,m}, i, "WSEN"[nt]); } else{ if(i<2)continue; auto v = get_info(i); int c =from_v({v[0],!v[1],1}); int nt = get_ch(c,T); if(nt>=0){ set_instruction({i,j,k,l,m}, c, "WSEN"[nt]); } } } } } else if(k==-2 && l==-2){ // end if(i)continue; int nt = get_parent(T); if(nt>=0) set_instruction({i,j,k,l,m}, 1, "WSEN"[nt]); } else{ if(j==1||k==1||l==1||m==1){ int nt = get_parent(T); if(nt>=0) set_instruction({i,j,k,l,m}, 1, "WSEN"[nt]); } else{ if(i==0){ int x = get_parent(T); if(x<0)continue; if(T[x]<2)continue; auto v = get_info(T[x]); set_instruction({i,j,k,l,m}, from_v({(v[0]+1)%3, v[1],0}), "WSEN"[x]); } else{ int x = get_parent(T); if(x<0)continue; auto v = get_info(i); auto vv = get_info(T[x]); int c = from_v({v[0],vv[1],1}); int ch = get_ch(c,T); if(i<2)continue; if(ch>=0){ set_instruction({i,j,k,l,m}, c, "WSEN"[ch]); } else{ int x = get_parent(T); if(x<0)continue; set_instruction({i,j,k,l,m}, from_v({v[0],vv[1],0}), "WSEN"[x]); } } } } } } } } } }
#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...