Crashing Robots(imitate)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8124 | Accepted: 3528 |
Description
Input
- L: turn left 90 degrees,
- R: turn right 90 degrees, or
- F: move forward one meter,
and 1 <= < repeat> <= 100 is the number of times the robot should perform this single move.
Output
- Robot i crashes into the wall, if robot i crashes into a wall. (A robot crashes into a wall if Xi = 0, Xi = A + 1, Yi = 0 or Yi = B + 1.)
- Robot i crashes into robot j, if robots i and j crash, and i is the moving robot.
- OK, if no crashing occurs.
Only the first crash is to be reported.
Sample Input
4
5 4
2 2
1 1 E
5 4 W
1 F 7
2 F 7
5 4
2 4
1 1 E
5 4 W
1 F 3
2 F 1
1 L 1
1 F 3
5 4
2 2
1 1 E
5 4 W
1 L 96
1 F 2
5 4
2 3
1 1 E
5 4 W
1 F 4
1 L 1
1 F 20
Sample Output
Robot 1 crashes into the wall
Robot 1 crashes into robot 2
OK
Robot 1 crashes into robot 2
Source
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
struct robot
{
int x , y ;
int dir ;
}a[]; struct instruction
{
int num ;
char act ;
int rep ;
}ins[]; int EW , NS ;
int n , m ;
bool flag ;
int map[][]; void crash (int No)
{
int k = ins[No].rep ;
int t = ins[No].num ;
map[a[t].x][a[t].y] = ;
switch (a[t].dir)
{
case :
for (int i = ; i < k && a[t].x && a[t].y ; i++)
if (map[a[t].x][++a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case :
for (int i = ; i < k && a[t].x && a[t].y ; i++)
if (map[++a[t].x][a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case :
for (int i = ; i < k && a[t].x && a[t].y ; i++)
if (map[a[t].x][--a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case :
for (int i = ; i < k && a[t].x && a[t].y; i++)
if (map[--a[t].x][a[t].y]) {
flag = ;
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 == || a[t].x >= EW + || a[t].y == || a[t].y >= NS + ) {
printf ("Robot %d crashes into the wall\n" , t) ;
flag = ;
}
}
void solve (int No)
{
int k = ins[No].num ;
switch (ins[No].act)
{
case 'L' : a[k].dir -= ins[No].rep ; a[k].dir %= ; a[k].dir += ; a[k].dir %= ; break ;
case 'R' : a[k].dir += ins[No].rep ; a[k].dir %= ; a[k].dir += ; a[k].dir %= ; break ;
case 'F' : crash (No) ;
}
}
int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
int T ;
scanf ("%d" , &T) ;
char temp ;
while (T--) {
memset (map , , sizeof(map) ) ;
scanf ("%d%d" , &EW , &NS) ;
scanf ("%d%d" , &n , &m) ;
for (int i = ; 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 = ; break ;
case 'S' : a[i].dir = ; break ;
case 'W' : a[i].dir = ; break ;
case 'N' : a[i].dir = ; break ;
}
// printf ("a[%d].dir=%d\n" , i , a[i].dir) ;
}
for (int i = ; i < m ; i++)
cin >> ins[i].num >> ins[i].act >> ins[i].rep ; flag = ;
// printf ("a[1].dir=%d\n" , a[1].dir) ;
for (int i = ; 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 ;
}
规规矩矩得模拟 robot 一步步走就行了
Crashing Robots(imitate)的更多相关文章
- POJ2632 Crashing Robots(模拟)
题目链接. 分析: 虽说是简单的模拟,却调试了很长时间. 调试这么长时间总结来的经验: 1.坐标系要和题目建的一样,要不就会有各种麻烦. 2.在向前移动过程中碰到其他的机器人也不行,这个题目说啦:a ...
- poj 2632 Crashing Robots(模拟)
链接:poj 2632 题意:在n*m的房间有num个机器,它们的坐标和方向已知,现给定一些指令及机器k运行的次数, L代表机器方向向左旋转90°,R代表机器方向向右旋转90°,F表示前进,每次前进一 ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) A. Contest for Robots(数学)
题意: n 道题,2 个答题者,已知二者的做题情况,你是受贿裁判,可以给每题指定分值(≥1),求甲乙分数(甲>乙)相差最小时最大分值的最小值. 思路: 统计只有甲或乙做出的题目数. 加一取下整判 ...
- POJ 2632 Crashing Robots(较为繁琐的模拟)
题目链接:http://poj.org/problem?id=2632 题目大意:题意简单,N个机器人在一个A*B的网格上运动,告诉你机器人的起始位置和对它的具体操作,输出结果: 1.Robot i ...
- ZOJ 1654 Place the Robots(最大匹配)
Robert is a famous engineer. One day he was given a task by his boss. The background of the task was ...
- [AGC004E] Salvage Robots (DP)
Description 蛤蟆国的领土我们可以抽象为H*W的笼子,在这片蛤土上,有若干个机器人和一个出口,其余都是空地,每次蛤蟆会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被蛤蟆活摘出 ...
- 【ZOJ1003】Crashing Balloon(DFS)
Crashing Balloon Time Limit: 2 Seconds Memory Limit: 65536 KB On every June 1st, the Children's ...
- UVALive 7464 Robots (贪心)
Robots 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/K Description http://7xjob4.com1.z ...
- UVALive 7464 Robots(模拟)
7464Robots Write a program to collect data from robots. We are given two sets of robotsX=fX1;:::;Xmg ...
随机推荐
- Linux 安装配置Subversion edge
2014-04-14:修正部分描述.添加JAVA_HOME报错处理步骤.添加配置sudoers 系统:CentOS 5.8 ,6.4 Subversion版本:Subversion Edge 4.0. ...
- 一个基于.NET平台的自动化/压力测试系统设计简述
AutoTest系统设计概述 AutoTest是一个基于.NET平台实现的自动化/压力测试的系统,可独立运行于windows平台下,支持分布式部署,不需要其他配置或编译器的支持.(本质是一个基于协议的 ...
- linux下定时任务的使用
使用方法 执行crontab -e命令会进入一个可编辑界面,在该界面中我们可以制定定时任务,然后保存退出(wq) 格式如下: 由于直接运行编辑命令后只是一个空白界面,不够友好,所以建议使用以下方式来增 ...
- Moqui之时间转换
<script><![CDATA[ if (fromDate == null && thruDate == null && year &&am ...
- iOS开发小技巧--设置按钮圆角
方法一:代码设置 方法二:通过图形化界面
- 【CodeForces 606A】A -特别水的题1-Magic Spheres
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102271#problem/A Description Carl is a beginne ...
- javascript自动转换大小写
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- java 线程---成员变量与局部变量
关于成员变量与局部变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员变量的改变会影响到另一个线程) . 如果一个变量是局 ...
- 安装hadoop2.4.0遇到的问题
一.执行start-dfs.sh后,datenode没有启动 查看日志如下: 2014-06-18 20:34:59,622 FATAL org.apache.hadoop.hdfs.server.d ...
- iphone6 wifi自动断开 tplink
这样设置就好了,不会自动断开 了