POJ 2632 Crashing Robots

来源:互联网 发布:淘宝网军印铁锹 编辑:程序博客网 时间:2024/04/30 07:12

题目很简答就是一个大模拟啊,可是我却敲了整整两天啊、、、sad的是竟然还是错了啊,10000+的代码啊,死的心都有了啊,后来看到大神的代码简单明了啊,突然发现要学习的东东太多了啊!这些都是经验啊,我还在傻了吧唧的重复啊,他们直接很简单的就解决了啊,一定得好好的学习一下啊!这就是经验啊,哎。。菜鸟明显不给力啊!

这是我写的,错了啊。只能过掉样例,过不了discuss里面的数据啊、、、、、

虽然折腾了两天有点浪费时间,但是让我印象深刻啊,下次一定要注意啊,水题中成长啊、、、

#include <stdio.h>#include <string.h>struct p{    int x, y, f;} num[1010];struct q{    int id, tap, step;} order[110];int main(){    int t, n, m, a, b, i, flat;    int dp[110][110];    char s;    scanf("%d",&t);    while(t--)    {        flat = 0;        memset(dp , 0 , sizeof(dp));        scanf("%d %d",&a, &b);        scanf("%d %d",&n, &m);        for(i = 0; i < n; i++)        {            scanf("%d %d %c",&num[i].x, &num[i].y, &s);            dp[num[i].y][num[i].x] = i+1;            if(s == 'N')                num[i].f = 1;            else if(s == 'S')                num[i].f = 2;            else if(s == 'W')                num[i].f = 3;            else if(s == 'E')                num[i].f = 4;        }        for(i = 0; i < m; i++)        {            scanf("%d %c %d",&order[i].id, &s, &order[i].step);            if(s == 'L')                order[i].tap = 1;            else if(s == 'R')                order[i].tap = 2;            else if(s == 'F')                order[i].tap = 3;        }        for(i = 0; i < m; i++)        {            if(order[i].tap == 1)            {                if(num[order[i].id-1].f == 1)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 1;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 4;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 2;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 3;                }                else if(num[order[i].id-1].f == 2)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 2;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 3;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 1;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 4;                }                else if(num[order[i].id-1].f == 3)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 3;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 2;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 4;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 1;                }                else if(num[order[i].id-1].f == 4)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 4;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 1;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 3;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 2;                }            }            else if(order[i].tap == 2)            {                if(num[order[i].id-1].f == 1)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 1;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 3;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 2;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 4;                }                else if(num[order[i].id-1].f == 2)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 2;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 4;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 1;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 3;                }                else if(num[order[i].id-1].f == 3)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 3;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 1;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 4;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 2;                }                else if(num[order[i].id-1].f == 4)                {                    if(order[i].step % 4 == 0)                        num[order[i].id-1].f = 4;                    else if(order[i].step % 4 == 1)                        num[order[i].id-1].f = 2;                    else if(order[i].step % 4 == 2)                        num[order[i].id-1].f = 3;                    else if(order[i].step % 4 == 3)                        num[order[i].id-1].f = 1;                }            }            else if(order[i].tap == 3)            {                if(num[order[i].id-1].f == 1)                {                    for(int j = 1; j <= order[i].step; j++)                    {                        if(num[order[i].id-1].x+j > b)                        {                            flat = 1;                            printf("Robot %d crashes into the wall\n",order[i].id);                            break;                        }                        if(dp[num[order[i].id-1].x+j][num[order[i].id-1].y] != 0)                        {                            flat = 1;                            printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x+j][num[order[i].id-1].y]);                            break;                        }                    }                    if(flat == 1)                        break;                    else                    {                        dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0;                        num[order[i].id-1].x += order[i].step;                        dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id;                    }                }                else if(num[order[i].id-1].f == 2)                {                    for(int j = 1; j <= order[i].step; j++)                    {                        if(num[order[i].id-1].x-j < 0)                        {                            flat = 1;                            printf("Robot %d crashes into the wall\n",order[i].id);                            break;                        }                        if(dp[num[order[i].id-1].x-j][num[order[i].id-1].y] != 0)                        {                            flat = 1;                            printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x-j][num[order[i].id-1].y]);                            break;                        }                    }                    if(flat == 1)                        break;                    else                    {                        dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0;                        num[order[i].id-1].x -= order[i].step;                        dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id;                    }                }                else if(num[order[i].id-1].f == 3)                {                    for(int j = 1; j <= order[i].step; j++)                    {                        if(num[order[i].id-1].x-j <= 0)                        {                            flat = 1;                            printf("Robot %d crashes into the wall\n",order[i].id);                            break;                        }                        if(dp[num[order[i].id-1].y-j][num[order[i].id-1].x] != 0)                        {                            flat = 1;                            printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].y][num[order[i].id-1].x-j]);                            break;                        }                    }                    if(flat == 1)                        break;                    else                    {                        dp[num[order[i].id-1].y][num[order[i].id-1].x] = 0;                        num[order[i].id-1].x -= order[i].step;                        dp[num[order[i].id-1].y][num[order[i].id-1].x] = order[i].id;                    }                }                else if(num[order[i].id-1].f == 4)                {                    for(int j = 1; j <= order[i].step; j++)                    {                        if(num[order[i].id-1].y+j > a)                        {                            flat = 1;                            printf("Robot %d crashes into the wall\n",order[i].id);                            break;                        }                        if(dp[num[order[i].id-1].x][num[order[i].id-1].y+j] != 0)                        {                            flat = 1;                            printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x][num[order[i].id-1].y+j]);                            break;                        }                    }                    if(flat == 1)                        break;                    else                    {                        dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0;                        num[order[i].id-1].y += order[i].step;                        dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id;                    }                }            }        }        if(flat == 0)            printf("OK\n");    }    return 0;}

这是跟大神学习的啊,这个可以AC的

#include <stdio.h>#include <string.h>#define MAX 105int dx[4] = {0, -1, 0, 1}, dy[4] = {1, 0, -1, 0};int a, b, n, m, map[MAX][MAX], sta[MAX][3];int dir(char c){    switch(c)    {    case 'N':        return 0;    case 'W':        return 1;    case 'S':        return 2;    default:        return 3;    }}int main(){    int T, i, j, x, y, suc;    char ts[5];    scanf("%d", &T);    while(T--)    {        memset(map, 0, sizeof(map));        scanf("%d%d%d%d", &a, &b, &n, &m);        for(i = 1; i <= n; i++)        {            scanf("%d%d%s", &x, &y, ts);            map[x][y] = i;            sta[i][0] = x, sta[i][1] = y, sta[i][2] = dir(ts[0]);        }        suc = 1;        while(m--)        {            scanf("%d%s%d", &i, ts, &j);            while(j-- && suc)                switch(ts[0])                {                case 'L':                    sta[i][2] = (sta[i][2] + 1) % 4;                    break;                case 'R':                    sta[i][2] = (sta[i][2] + 3) % 4;                    break;                default:                    map[sta[i][0]][sta[i][1]]  = 0;                    x = sta[i][0] += dx[sta[i][2]];                    y = sta[i][1] += dy[sta[i][2]];                    if(!x || x > a || !y || y > b)                    {                        printf("Robot %d crashes into the wall\n", i);                        suc = 0;                    }                    else if(map[x][y])                    {                        printf("Robot %d crashes into robot %d\n", i, map[x][y]);                        suc = 0;                    }                    else                        map[x][y] = i;                    break;                }        }        if(suc)            printf("OK\n");    }    return 0;}


原创粉丝点击