POJ 2632 Crashing Robots (模拟 坐标调整)(fflush导致RE)

来源:互联网 发布:财税软件 编辑:程序博客网 时间:2024/06/06 02:51

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

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

本来2632是道稍微恶心点的模拟,但毕竟是模拟,一般模拟都是只要示例过了基本就AC了,但这个题很特殊

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

这个题给出的坐标系是纵轴为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;}


 

1 0
原创粉丝点击