题目链接:http://poj.org/problem?id=2632

先话说昨天顺利1Y之后,直到今天下午才再出题 TAT,真是刷题计划深似海,从此AC是路人- -

本来2632是道略微恶心点的模拟,但毕竟是模拟,一般模拟都是仅仅要演示样例过了基本就AC了。但这个题非常特殊

我開始的时候一直跑不出測试演示样例。才发现题目中的插图和我构想的坐标系是不一样的(看来还不能轻易忽视掉插图啊)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZWh5cG8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

这个题给出的坐标系是纵轴为y,横轴为x,y从下到上依次递增,x轴是从左到右递增

而我用的二维数组记录的地图,也就是说我的纵向是x轴并且从上到下递增。横向是y轴。从左到右递增

在我调了程序近一个小时之后才发现了这个问题。

然后突然懵了。不知道怎么实现了。

突然的全盘否定让我瞬间没了思路

过了一段时间我才缓过来,然后打算偷梁换柱

由于这个题目仅仅有在定义机器人的时候才用到了坐标,在指令上没实用到坐标

然后我就这样想,在过程处理上依旧使用数组那套坐标系。而在录入保存的时候做些转换

scanf ("%d%d%s",&x,&y,to);

MAP[B - y][x - 1] = i;
rob[i].x = B - y;
rob[i].y = x - 1;

 

然后直接不用再管这套坐标系了

后面进展顺利,非常快代码成形。调了几组数据全过。然后一交:RE

然后赶紧看数据范围。地图范围,发现我开的远远大于范围最大值,由于是模拟。又没实用指针,所以检查了几遍代码,着重检查数组下标

没有发现问题,跑了discuss里给的測试数据。全过,一交还是RE,卡了好久

最终没有办法了,仅仅能乱改,直到AC.  (= = 乱改竟然改AC了)

我改的是把录入字符改为录入字符串,仅仅取字符串第一个字符(s[0])。目的是不用控制空格(只是还是RE)

然后由于已经不用空格了,我把我原来控制空格回车符的fflush(stdin)----清空输入流函数去掉

然后提交AC,至于为什么fflush导致RE。实在不明确。百度直说了fflush并不是库函数,仅仅是库函数的补充,部分linux会导致不兼容

尽管不是CE,但不排除是这方面的原因。只是fflush我在处理输入流的时候经经常使用,这是第一次出现故障。

fflush导致了RE,也算给自己一次警告吧。

 

总的来说,这个题也就是一个模拟。尽管麻烦点。但毕竟是个模拟题。

代码例如以下:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> struct n
{
int x,y;
int to;
}rob[10000]; int MAP[150][150];
int A,B; int mov (int no,int turn)
{
int x = rob[no].x,y = rob[no].y;
int to = rob[no].to; //printf ("!1!%d %d\n",x,y); MAP[x][y] = -1;
switch (to)
{
case 1:
if (turn == 1)
{
rob[no].to = 4;
//y--;
}else if (turn == 2)
{
rob[no].to = 2;
//y++;
}else if (turn == 3)
{
x--;
}
break;
case 2:
if (turn == 1)
{
rob[no].to = 1;
//x--;
}else if (turn == 2)
{
rob[no].to = 3;
//x++;
}else if (turn == 3)
{
y++;
}
break;
case 3:
if (turn == 1)
{
rob[no].to = 2;
//y++;
}else if (turn == 2)
{
rob[no].to = 4;
//y--;
}else if (turn == 3)
{
x++;
}
break;
case 4:
if (turn == 1)
{
rob[no].to = 3;
//x++;
}else if (turn == 2)
{
rob[no].to = 1;
//x--;
}else if (turn == 3)
{
y--;
}
break;
} //printf ("!2!%d %d\n",x,y);
if (x < 0 || y < 0 || x >= B || y >= A)
{
printf ("Robot %d crashes into the wall\n",no + 1);
return 0;
} if (MAP[x][y] != -1)
{
printf ("Robot %d crashes into robot %d\n",no + 1,MAP[x][y] + 1);
return 0;
} rob[no].x = x;
rob[no].y = y;
MAP[x][y] = no;
return 1;
} int main()
{
//freopen ("1.txt","w",stdout);
int N;
int i,k;
scanf ("%d",&N); while (N--)
{
int n,m;
memset (MAP,-1,sizeof (MAP));
memset (rob,0,sizeof (rob));
scanf ("%d%d",&A,&B);
scanf ("%d%d",&n,&m); for (i = 0;i < n;i++)
{
int x,y;
char to[10]; //fflush (stdin);
scanf ("%d%d%s",&x,&y,to); MAP[B - y][x - 1] = i;
rob[i].x = B - y;
rob[i].y = x - 1; if (to[0] == 'N')
{
rob[i].to = 1;
}else if (to[0] == 'E')
{
rob[i].to = 2;
}else if (to[0] == 'S')
{
rob[i].to = 3;
}else if (to[0] == 'W')
{
rob[i].to = 4;
}
} int tf = 1; for (i = 0;i < m;i++)
{
int no,lop,iact;
char act[10]; //fflush (stdin);
scanf ("%d%s%d",&no,act,&lop); if (act[0] == 'L')
iact = 1;
else if (act[0] == 'R')
iact = 2;
else if (act[0] == 'F')
iact = 3; for (k = 0;k < lop;k++)
if (tf)
tf = mov (no - 1,iact);
} if (tf)
puts ("OK");
} return 0;
}

 

POJ 2632 Crashing Robots (模拟 坐标调整)(fflush导致RE)的更多相关文章

  1. poj 2632 Crashing Robots 模拟

    题目链接: http://poj.org/problem?id=2632 题目描述: 有一个B*A的厂库,分布了n个机器人,机器人编号1~n.我们知道刚开始时全部机器人的位置和朝向,我们可以按顺序操控 ...

  2. POJ 2632 Crashing Robots 模拟 难度:0

    http://poj.org/problem?id=2632 #include<cstdio> #include <cstring> #include <algorith ...

  3. 模拟 POJ 2632 Crashing Robots

    题目地址:http://poj.org/problem?id=2632 /* 题意:几个机器人按照指示,逐个朝某个(指定)方向的直走,如果走过的路上有机器人则输出谁撞到:如果走出界了,输出谁出界 如果 ...

  4. POJ 2632 Crashing Robots (坑爹的模拟题)

    Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6599   Accepted: 2854 D ...

  5. poj 2632 Crashing Robots(模拟)

    链接:poj 2632 题意:在n*m的房间有num个机器,它们的坐标和方向已知,现给定一些指令及机器k运行的次数, L代表机器方向向左旋转90°,R代表机器方向向右旋转90°,F表示前进,每次前进一 ...

  6. poj 2632 Crashing Robots

    点击打开链接 Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6655   Accepted: ...

  7. POJ 2632 Crashing Robots(较为繁琐的模拟)

    题目链接:http://poj.org/problem?id=2632 题目大意:题意简单,N个机器人在一个A*B的网格上运动,告诉你机器人的起始位置和对它的具体操作,输出结果: 1.Robot i ...

  8. poj 2632 Crashing Robots_模拟

    做的差点想吐,调来调去,编译器都犯毛病,wlgq,幸好1a. 题意:给你机器人怎走的路线,碰撞就输出 #include <cstdlib> #include <iostream> ...

  9. Poj OpenJudge 百练 2632 Crashing Robots

    1.Link: http://poj.org/problem?id=2632 http://bailian.openjudge.cn/practice/2632/ 2.Content: Crashin ...

随机推荐

  1. JobTracker与TaskTracker的关系

    JobTracker  对应于 NameNode TaskTracker 对应于 DataNode DataNode 和NameNode 是针对数据存放来而言的 JobTracker和TaskTrac ...

  2. iOS学习笔记-084.粒子效果——路径移动

    https://blog.csdn.net/qiwenmingshiwo/article/details/75806637 粒子效果路径移动一说明1 效果2 步骤分析二代码1 VCViewh2 VCV ...

  3. javascript基础:dom

    Dom: * 概念:Document Object  Model    文档对象模型 * 将标记语言文档的各个组成部分,封装成对象,可以使用这些对象,对标记语言文档进行CRUD的动态操作 *    D ...

  4. python使用matplotlib:subplot绘制多个子图

    1 问题描述 matploglib 能够绘制出精美的图表, 有些时候, 我们希望把一组图放在一起进行比较, 有没有什么好的方法呢? matplotlib 中提供的 subplot 可以很好的解决这个问 ...

  5. 基于MaxCompute打造轻盈的人人车移动端数据平台

    摘要: 2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,人人车大数据平台负责人吴水永从人人车 ...

  6. MAC中已有的虚拟环境在pycharm 中进行调用

    首先确定虚拟环境的路径: 打开工作环境配置文件,找到工作目录: 在pycharm中解释器中找到工作目录中对应的虚拟环境进行配置就可以了

  7. 移动端适配(rem单位定义方法)

    注:移动端必须写: <meta name="viewport" content="width=device-width, user-scalable=no, ini ...

  8. php mkdir 777失败

    参考网址:https://www.cnblogs.com/52php/p/5660079.html 在linux系统中在创建文件/文件夹时有一个默认权限,此权限受 umask 设置影响,在/etc/b ...

  9. node学习记录之res,req处理方法

    上一篇中,我们讲述了怎么去用node搭建一个服务器环境,然后设置路由 在路由中我们用了一些方法,req.query("id") , res.end() , res.send()这三 ...

  10. 使用SpringBoot发送mail邮件

    1.前言 发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息.正常我们会用JavaMail相关api来写发送邮件的相关代码,但现在springboot提供了一套更简易使用 ...