| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
写的这么长,以为又是WA的节奏 , 竟然一次就AC了,贴代码!#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
struct robot
{
int x , y ;
int dir ;
}a[200];
struct instruction
{
int num ;
char act ;
int rep ;
}ins[200];
int EW , NS ;
int n , m ;
bool flag ;
int map[150][150];
void crash (int No)
{
int k = ins[No].rep ;
int t = ins[No].num ;
map[a[t].x][a[t].y] = 0 ;
switch (a[t].dir)
{
case 0 :
for (int i = 0 ; i < k && a[t].x && a[t].y ; i++)
if (map[a[t].x][++a[t].y]) {
flag = 1 ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case 1 :
for (int i = 0 ; i < k && a[t].x && a[t].y ; i++)
if (map[++a[t].x][a[t].y]) {
flag = 1 ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case 2 :
for (int i = 0 ; i < k && a[t].x && a[t].y ; i++)
if (map[a[t].x][--a[t].y]) {
flag = 1 ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case 3 :
for (int i = 0 ; i < k && a[t].x && a[t].y; i++)
if (map[--a[t].x][a[t].y]) {
flag = 1 ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
}
map[a[t].x][a[t].y] = t ;
if (a[t].x == 0 || a[t].x >= EW + 1 || a[t].y == 0 || a[t].y >= NS + 1) {
printf ("Robot %d crashes into the wall\n" , t) ;
flag = 1 ;
}
}
void solve (int No)
{
int k = ins[No].num ;
switch (ins[No].act)
{
case 'L' : a[k].dir -= ins[No].rep ; a[k].dir %= 4 ; a[k].dir += 4 ; a[k].dir %= 4 ; break ;
case 'R' : a[k].dir += ins[No].rep ; a[k].dir %= 4 ; a[k].dir += 4 ; a[k].dir %= 4 ; break ;
case 'F' : crash (No) ;
}
}
int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
int T ;
scanf ("%d" , &T) ;
char temp ;
while (T--) {
memset (map , 0 , sizeof(map) ) ;
scanf ("%d%d" , &EW , &NS) ;
scanf ("%d%d" , &n , &m) ;
for (int i = 1 ; i <= n ; i++) {
cin >> a[i].x >> a[i].y >> temp ;
// cout << temp <<endl ;
map[a[i].x][a[i].y] = i ;
switch (temp)
{
case 'E' : a[i].dir = 1 ; break ;
case 'S' : a[i].dir = 2 ; break ;
case 'W' : a[i].dir = 3 ; break ;
case 'N' : a[i].dir = 0 ; break ;
}
// printf ("a[%d].dir=%d\n" , i , a[i].dir) ;
}
for (int i = 0 ; i < m ; i++)
cin >> ins[i].num >> ins[i].act >> ins[i].rep ;
flag = 0 ;
// printf ("a[1].dir=%d\n" , a[1].dir) ;
for (int i = 0 ; i < m ; i++) {
/* for (int i = 1 ; i <= EW ; i++) {
for (int j = 1 ; j <= NS ; j++) {
printf ("%d " , map[i][j]) ;
}
puts("");
}
puts ("") ;*/
solve (i) ;
/* for (int i = 1 ; i <= EW ; i++) {
for (int j = 1 ; j <= NS ; j++) {
printf ("%d " , map[i][j]) ;
}
puts("");
}
printf ("\n\n\n") ; */
if (flag)
break ;
}
if (!flag)
puts ("OK") ;
}
return 0 ;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator