⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4633549_wa.cpp

📁 部分PKU上的源码
💻 CPP
字号:
#include<iostream>
using namespace std;
int qipan[105][105];//前面未行,后面未列
int direction[105];//N=1,E=2,S=3,W=4
int placeA[105];
int placeB[105];
int result;
int wuti1,wuti2;
int A,B,n,m;
int getd(char dir)
{
	switch(dir)
	{
	case 'N':return 1;
	case 'E':return 2;
	case 'S':return 3;
	case 'W':return 4;
	}
	return -1;
}
void test_out()
{
	for(int count=B;count>=1;count--)
	{
		for(int count2=1;count2<=A;count2++) cout<<qipan[count2][count]<<" ";
		cout<<endl;
	}
	for(int i=1;i<=n;i++) cout<<direction[i]<<" ";
	cout<<endl;
}
bool doit(int root,char action,int repeat)
{
	int count;
	int temp;
	switch(action)
	{
	case 'L':direction[root]-=repeat;direction[root]%=4;if(direction[root]<0)direction[root]*=-1;return true;
	case 'R':direction[root]+=repeat;direction[root]%=4;if(direction[root]<0)direction[root]*=-1;return true;
	case 'F':
		switch(direction[root])
		{
		case 1:temp=placeB[root]+repeat;//N
			for(count=placeB[root]+1;count<=temp;count++)
			{
				if(count>B) {result=1;wuti1=root;return false;}
				if(qipan[placeA[root]][count]!=0)
				{
					result=2;
					wuti1=root;
					wuti2=qipan[placeA[root]][count];
					return false;
				}
			}
			qipan[placeA[root]][placeB[root]]=0;
			qipan[placeA[root]][temp]=root;
			placeB[root]=temp;
			return true;
		case 2:temp=placeA[root]+repeat;//E
			for(count=placeA[root]+1;count<=temp;count++)
			{
				if(count>A) {result=1;wuti1=root;return false;}
				if(qipan[count][placeB[root]]!=0)
				{

					result=2;
					wuti1=root;
					wuti2=qipan[count][placeB[root]];
					return false;
				}
			}
			qipan[placeA[root]][placeB[root]]=0;
			qipan[temp][placeB[root]]=root;
			placeA[root]=temp;
			return true;
		case 3:temp=placeB[root]-repeat;//S
			for(count=placeB[root]-1;count>=temp;count--)
			{
				if(count<=0) {result=1;wuti1=root;return false;}
				if(qipan[placeA[root]][count]!=0)
				{
					result=2;
					wuti1=root;
					wuti2=qipan[placeA[root]][count];
					return false;
				}
			}
			qipan[placeA[root]][placeB[root]]=0;
			qipan[placeA[root]][temp]=root;
			placeB[root]=temp;
			return true;
		case 4:temp=placeA[root]-repeat;//W
			for(count=placeA[root]-1;count>=temp;count--)
			{
				if(count<=0) {result=1;wuti1=root;return false;}
				if(qipan[count][placeB[root]]!=0)
				{
					result=2;
					wuti1=root;
					wuti2=qipan[count][placeB[root]];
					return false;
				}
			}
			qipan[placeA[root]][placeB[root]]=0;
			qipan[temp][placeB[root]]=root;
			placeA[root]=temp;
			return true;
		}
	}
	return false;
}
void out()
{
	if(result==1) cout<<"Robot "<<wuti1<<" crashes into the wall\n";
	if(result==2) cout<<"Robot "<<wuti1<<" crashes into robot "<<wuti2<<"\n";
}
int main()
{
	int testnumber;
	cin>>testnumber;
	for(int count=1;count<=testnumber;count++)
	{
		cin>>A>>B;//A为行,B为列
		cin>>n>>m;
		memset(qipan,0,sizeof(qipan));
		for(int count2=1;count2<=n;count2++)
		{
			int a,b;
			char dir;
			cin>>a>>b>>dir;
			qipan[a][b]=count2;
			placeA[count2]=a;
			placeB[count2]=b;
			direction[count2]=getd(dir);
		}
		bool need=true;
		bool ok=true;;
		for(int count3=1;count3<=m;count3++)
		{
			int boot,repeat;
			char action;
			cin>>boot>>action>>repeat;
			if(need)
			{
				if(!doit(boot,action,repeat)) {need=false;ok=false;}
			}
		//	test_out();
		//	cout<<ok<<endl;
		}
		if(ok) cout<<"OK"<<endl;
		else out();
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -