QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#163513 | #7123. Robot Contest | vme50 | Judging | / | / | C++17 | 1.3kb | 2023-09-04 09:47:39 | 2024-04-21 00:16:28 |
Judging History
你现在查看的是测评时间为 2024-04-21 00:16:28 的历史记录
- [2023-09-04 09:47:39]
- 提交
answer
#include <bits/stdc++.h>
#include "robot.h"
using namespace std;
#define pb push_back
#define po pop_back
const int X[]={0,-1,0,1,0},Y[]={0,0,-1,0,1};
const char A[]="HWSEN";
int f(int x) {return (x-2&3)+1;}
int f1(int x) {return (x-2^4)+2;}
bool chk(int x,int y) {return abs(x-y)==2;}
void slv(vector<int> stt)
{
if(stt[0]<0) return;
if(!stt[0])
{
for(int i=1;i<=4;++i) if(stt[i]>1 && stt[i]<6)
{set_instruction(stt,i+5,A[0]);return;}
set_instruction(stt,2,A[0]);
}
else if(stt[0]==1) set_instruction(stt,1,'T');
else
{
if(stt[2]==-2 && stt[3]==-2)
{set_instruction(stt,1,A[f(stt[0])]);return;}
int t=stt[1]==-2 && stt[4]==-2?0:f(stt[0]);
for(int i=1;i<=4;++i) if(stt[i]==1)
{set_instruction(stt,1,A[t]);return;}
if(t && (stt[0]<6)==(stt[t]<6))
{set_instruction(stt,f1(stt[0]),A[0]);return;}
if(stt[0]<6) for(int i=1;i<=4;++i) if(!stt[i])
{set_instruction(stt,stt[0],A[i]);return;}
for(int i=1;i<=4;++i)
if(stt[i]>1 && (stt[0]<6)==(stt[i]<6) && chk(i,f(stt[i])))
{set_instruction(stt,stt[0],A[i]);return;}
if(t) set_instruction(stt,stt[0],A[t]);
else set_instruction(stt,f1(stt[0]),A[0]);
}
}
void dfs(int u,vector<int> stt)
{
if(u>4) {slv(stt);return;}
for(int i=-2;i<=9;++i) stt.pb(i),dfs(u+1,stt),stt.po();
}
void program_pulibot() {dfs(0,{});}