Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

这么恶心的模拟题竟然一次ac了,弄了2个多小时。。。真无语啊(附ac代码)

Posted by mengfanqi at 2010-09-02 21:44:38 on Problem 2632
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

int out[2];
int row,col,flag;
typedef struct Instruction
{
	int robot;
	char action;
	int repeat;
}instruction;

typedef struct Machine
{
	int x;
	int y;
	int face;  //N-0,E-1,S-2,W-3
	int back;  
	int left;
	int right;
}machine;
machine machines[105];
instruction instructions[105];
bool judge(machine a,machine b){
	if((a.x != b.x )|| (a.y !=b.y))  //不相交返回false
		return false;
	else
		return true;

}
bool judgeM(machine a){
	if(a.x<1 || a.x >col || a.y<1 || a.y > row)
		return true;
	return false;
}
int process(int m,int n){
	flag=0;
	int i,j,k,robot,repeat;
	char action;
	machine tmp;
	for(i=1;i<=m;i++){
		robot=instructions[i].robot;
		action=instructions[i].action;
		repeat=instructions[i].repeat;
	//	printf("face:%d\n",machines[robot].face );
		switch(action){
			case'F':{
				switch(machines[robot].face){
					case 0:
						for(j=1;j<=repeat;j++){
							machines[robot].y++;
							for(k=1;k<=n;k++){
								if(k==robot) continue;
								if(judge(machines[k],machines[robot]) ){
									out[0]=robot,out[1]=k;
									flag=2; return flag;
									
								} 
							}
						}
						break;
					case 1:
						for(j=1;j<=repeat;j++){				
							machines[robot].x++;
							for(k=1;k<=n;k++){
								if(k==robot) continue;
								if(judge(machines[k],machines[robot]) ){
									out[0]=robot,out[1]=k;
									flag=2; return flag;
								}
							}
						}
						//printf("x:%d\n",machines[robot].x);
						break;
					case 2:
						for(j=1;j<=repeat;j++){
							machines[robot].y--;
							for(k=1;k<=n;k++){
								if(k==robot) continue;
								if(judge(machines[k],machines[robot]) ){
									out[0]=robot,out[1]=k;
									flag=2; return flag;
								}
							}
						}
						break;
					case 3:
						for(j=1;j<=repeat;j++){
							machines[robot].x--;
							for(k=1;k<=n;k++){
								if(k==robot) continue;
								if(judge(machines[k],machines[robot]) ){
									out[0]=robot,out[1]=k;
									flag=2; return flag;
								}
							}
						}
					   break;
				}
				if(judgeM(machines[robot])){
					flag=1;out[0]=robot;
					return flag;
				}
				break;
			}
			case'L':
				for(j=1;j<=repeat%4;j++){
					tmp=machines[robot];
					machines[robot].face=tmp.left;
					machines[robot].back=tmp.right;
					machines[robot].left=tmp.back;
					machines[robot].right=tmp.face;
				}
				break;
			case'R':
				for(j=1;j<=repeat%4;j++){
					tmp=machines[robot];
					machines[robot].face=tmp.right;
					machines[robot].back =tmp.left;
					machines[robot].left =tmp.face;
					machines[robot].right =tmp.back ;
				}
				break;	
		}
		//printf("robot:%d action:%c face:%d x:%d y:%d\n",robot,action,machines[robot].face,machines[robot].x,machines[robot].y);
	
	}
	return flag;

}

int main()
{
	int k,n,m,face,i;
	char c;
	scanf("%d",&k);
	while(k--){
		scanf("%d%d",&col,&row);
		scanf("%d%d",&n,&m);
		for(i=1;i<=n;i++){
			scanf("%d%d",&(machines[i].x),&(machines[i].y));
			getchar();
			c=getchar();
			switch(c){
				case'N': face=0; break;
				case'E': face=1; break;
				case'S': face=2; break;
				case'W': face=3; break;
			}
			machines[i].face=face;
			machines[i].back=(face+2)%4;
			machines[i].left=(face+3)%4;
			machines[i].right=(face+1)%4;
		}
		for(i=1;i<=m;i++){
			scanf("%d",&(instructions[i].robot));
			getchar();
			c=getchar();
			instructions[i].action=c;
			scanf("%d",&(instructions[i].repeat));
		}
		process(m,n);
		//printf("flag:%d\n",flag);
		if(flag==1){
			printf("Robot %d crashes into the wall\n",out[0]);
		}else if(flag==2){
			printf("Robot %d crashes into robot %d\n",out[0],out[1]);
		}else{
			printf("OK\n");
		}
		
	}
	system("pause");
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator