QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#163513#7123. Robot Contestvme50Judging//C++171.3kb2023-09-04 09:47:392024-04-21 00:16:28

Judging History

你现在查看的是测评时间为 2024-04-21 00:16:28 的历史记录

  • [2024-04-28 07:01:50]
  • 管理员手动重测本题所有提交记录
  • 测评结果:53
  • 用时:258ms
  • 内存:5224kb
  • [2024-04-21 00:19:20]
  • 管理员手动重测本题所有提交记录
  • 测评结果:53
  • 用时:235ms
  • 内存:5220kb
  • [2024-04-21 00:16:28]
  • 管理员手动重测本题所有提交记录
  • 测评结果:Judging
  • 用时:244ms
  • 内存:4896kb
  • [2023-09-04 09:47:39]
  • 评测
  • 测评结果:50
  • 用时:244ms
  • 内存:4896kb
  • [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,{});}