当前位置: 首页 > news >正文

pku 2623 Crashing Robots 第一周训练——模拟

http://poj.org/problem?id=2632

唉。。做模拟题一定要细心啊。才开始自己吧题意读错了,以为向左右转后还要走呢。调了很长时间还是没有过样例,最后又看了一遍题目才发现,原来是原地打转。悲剧啊。

还有就是对于tagp[a].mark的判断,if 必须配有els否则上一步对mark的改变会影响到下一步的处理。唉。。。这样的小错误在模拟题中是很难检查的。。唉。。费劲啊。

View Code
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 10007
using namespace std;
int flag;
struct node
{
int x,y;
char mark[2];
}tagp[maxn];
int nb,mb;
int iscrash(int a)
{
for (int i = 1; i <= nb; ++i)
{
if ((i != a) && (tagp[a].x == tagp[i].x) && (tagp[a].y == tagp[i].y))
return i;
}
return 0;
}
int main()
{
//freopen("d.txt","r",stdin);
int n,m,i,a,len;
char s[2];
int t,bpos,cpos;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
scanf("%d%d",&nb,&mb);
flag = 0;
memset(tagp,0,sizeof(tagp));
for (i = 1;i <= nb; ++i)
scanf("%d %d %s",&tagp[i].x,&tagp[i].y,tagp[i].mark);
while (mb--)
{
scanf("%d%s%d",&a,s,&len);
if (!flag)
{
if (tagp[a].mark[0] == 'N')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'W';
else if (len == 2)
tagp[a].mark[0] = 'S';
else if (len == 3)
tagp[a].mark[0] = 'E';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'E';
else if (len == 2)
tagp[a].mark[0] = 'S';
else if (len == 3)
tagp[a].mark[0] = 'W';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].y++;
if (tagp[a].y > m)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}
}
}
else if (tagp[a].mark[0] == 'S')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'E';
else if (len == 2)
tagp[a].mark[0] = 'N';
else if (len == 3)
tagp[a].mark[0] = 'W';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'W';
else if (len == 2)
tagp[a].mark[0] = 'N';
else if (len == 3)
tagp[a].mark[0] = 'E';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].y--;
if (tagp[a].y <= 0)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}
}
}
else if (tagp[a].mark[0] == 'W')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'S';
else if (len == 2)
tagp[a].mark[0] = 'E';
else if (len == 3)
tagp[a].mark[0] = 'N';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'N';
else if (len == 2)
tagp[a].mark[0] = 'E';
else if (len == 3)
tagp[a].mark[0] = 'S';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].x--;
if (tagp[a].x <= 0)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}
}
}
else if (tagp[a].mark[0] == 'E')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'N';
else if (len == 2)
tagp[a].mark[0] = 'W';
else if (len == 3)
tagp[a].mark[0] = 'S';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'S';
else if (len == 2)
tagp[a].mark[0] = 'W';
else if (len == 3)
tagp[a].mark[0] = 'N';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].x++;
if (tagp[a].x > n)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}

}
}
}
}
if (!flag) printf("OK\n");
else if (flag == 1) printf("Robot %d crashes into the wall\n",cpos);
else if (flag == 2) printf("Robot %d crashes into robot %d\n",cpos,bpos);
}
return 0;
}


 

相关文章:

  • 站长百科访谈第59期:张清分享网站优化技巧
  • Castle ActiveRecord的一对多问题
  • syntax error near unexpected token `then'
  • flex和javascript互相调用的一个例子
  • JSTL SQL标签库 使用
  • 数据结构--二叉树 的先序,中序,后序遍历
  • Directx11 教程(2) 基本的windows应用程序框架(2)
  • 多播_1
  • 【数据结构】排序算法(二)之交换排序之快速排序(QuickSort)
  • 批量缩小图片的方法
  • 精分神作さよならを教えて全解析
  • 在使用VC++6.0常见问题“Error spawning cl.exe”的解决方法
  • 说实话网络不通的2天是我2010年工作效率最高的2天
  • 如何构建LAMP
  • 冯小刚微博力挺×××标惹热议 称掏钱救人最实际
  • @jsonView过滤属性
  • “大数据应用场景”之隔壁老王(连载四)
  • iOS小技巧之UIImagePickerController实现头像选择
  • isset在php5.6-和php7.0+的一些差异
  • Java读取Properties文件的六种方法
  • js递归,无限分级树形折叠菜单
  • LintCode 31. partitionArray 数组划分
  • Map集合、散列表、红黑树介绍
  • spring-boot List转Page
  • webgl (原生)基础入门指南【一】
  • 官方解决所有 npm 全局安装权限问题
  • 技术发展面试
  • 两列自适应布局方案整理
  • 那些年我们用过的显示性能指标
  • 强力优化Rancher k8s中国区的使用体验
  • 什么软件可以剪辑音乐?
  • 手写一个CommonJS打包工具(一)
  • 数据结构java版之冒泡排序及优化
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Spring Boot 分片上传文件
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)nginx 安装、启停
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)winform之ListView
  • (转载)从 Java 代码到 Java 堆
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Standard 的管理策略
  • .NET 指南:抽象化实现的基类
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型