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 ...
随机推荐
- Asp.Net MVC 合并js或css请求
Step1:BundleConfig中注册 bundles.Add(new ScriptBundle("~/isValid").Include( "~/Scripts/ ...
- 面试官的七种武器:Java篇
起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...
- javascript基础知识拾遗
1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console ...
- C# JArray与JObject 的使用 json [{}]
C# JArray与JObject 的使用 STEP1.using Newtonsoft.Json.Linq; STEP2 如何获取json里的某个属性(节点)值,对其删改,新增 //2.1 数组用J ...
- Memcached——分布式缓存
下载文件:https://sourceforge.net/projects/memcacheddotnet/ 将Commons.dll,ICSharpCode.SharpZipLib.dll,log4 ...
- Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟
题目链接: http://codeforces.com/contest/734/problem/D D. Anton and Chess time limit per test4 secondsmem ...
- NOI2005维修数列 splay
好题,错了不知道多少遍.这题其他几个操作都是比较经典的,多了一个最大子序列的.这时候对于当前的区间,最大子序列,可能使左区间的最值,可能是右区间的最值,也可能是整个区间的.所以维护lx[],rx[], ...
- Java设计模式-命令模式(Command)
命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互解耦,任何一方都不用去依赖其 ...
- jQuery 文本编辑器插件 HtmlBox 使用
0.htmlbox下载地址:http://download.csdn.net/detail/leixiaohua1020/6376479 1.引入头文件 <script src="li ...
- 金融自助设备WOSA/XFS规范介绍
wosa(全称是windows开放式系统体系结构 windows open system architecture),是微软公司提出的一种在windows操作系统下的软件架构. wosa/xfs是基于 ...