• poj2632


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

      1 #include<stdio.h>
      2 #define N 110
      3 struct rob
      4 {
      5     int x,y,d;
      6 }rob[N];
      7 struct move
      8 {
      9     int id,act,rep;
     10 }mrob[N];
     11 
     12 int n,m,nums,moves;
     13 
     14 int f[N][N];
     15 
     16 void input()
     17 {
     18     int i,j;
     19     scanf("%d %d",&m,&n);
     20     for(i=1;i<=n;i++)
     21     {
     22         for(j=1;j<=m;j++)
     23             f[i][j]=0;
     24     }
     25     char c;
     26     scanf("%d %d",&nums,&moves);
     27     for(i=1;i<=nums;i++)
     28     {
     29         scanf("%d %d %c",&rob[i].y,&rob[i].x,&c);
     30         f[rob[i].x][rob[i].y]=i;
     31         switch(c)
     32         {
     33             case 'S':rob[i].d=0;break;
     34             case 'E':rob[i].d=1;break;
     35             case 'N':rob[i].d=2;break;
     36             case 'W':rob[i].d=3;break;
     37         }
     38     }
     39     for(i=1;i<=moves;i++)
     40     {
     41         scanf("%d %c %d",&mrob[i].id,&c,&mrob[i].rep);
     42         switch(c)
     43         {
     44             case 'L':mrob[i].act=1;break;
     45             case 'R':mrob[i].act=2;break;
     46             case 'F':mrob[i].act=3;break;
     47         }
     48     }
     49 }
     50 void ouput(int a,int b,int c)
     51 {
     52     if(c==1)
     53         printf("Robot %d crashes into the wall
    ",a);
     54     else
     55         printf("Robot %d crashes into robot %d
    ",a,b);
     56 }
     57 int move(int id,int x1,int y1,int c)
     58 {
     59     int x=rob[id].x;
     60     int y=rob[id].y;
     61     f[x][y]=0;
     62     for(int i=0;i<c;i++)
     63     {
     64         x+=x1;
     65         y+=y1;
     66         if(x<1||x>n||y<1||y>m)
     67         {
     68             ouput(id,0,1);
     69             return 0;
     70         }
     71         if(f[x][y]!=0)
     72         {
     73             ouput(id,f[x][y],2);
     74             return 0;
     75         }
     76     }
     77     f[x][y]=id;
     78     rob[id].x=x;
     79     rob[id].y=y;
     80     return 1;
     81 }
     82 int change(int a,int b,int c)
     83 {
     84     switch(b)
     85     {
     86         case 1:rob[a].d=(rob[a].d+c)%4;break;
     87         case 2:rob[a].d=(rob[a].d+3*c)%4;break;
     88         case 3:
     89             switch(rob[a].d)
     90             {
     91             case 0:
     92                 if(!move(a,-1,0,c))
     93                     return 0;
     94                 break;
     95             case 1:
     96                 if(!move(a,0,1,c))
     97                     return 0;
     98                 break;
     99             case 2:
    100                 if(!move(a,1,0,c))
    101                     return 0;
    102                 break;
    103             case 3:
    104                 if(!move(a,0,-1,c))
    105                     return 0;
    106                 break;
    107             }
    108             break;
    109     }
    110     return 1;
    111 }
    112 void solve()
    113 {
    114     int i;
    115     for(i=1;i<=moves;i++)
    116     {
    117         if(!change(mrob[i].id,mrob[i].act,mrob[i].rep))
    118             return;
    119     }
    120     printf("OK
    ");
    121 }
    122 int main()
    123 {
    124     int t;
    125     scanf("%d",&t);
    126     while(t--)
    127     {
    128         input();
    129         solve();
    130     }
    131     return 0;
    132 }
    View Code

    破模拟,做的哥哥要吐。。。。

  • 相关阅读:
    位运算大集合
    一道百度面试题——位运算
    一道Google面试题——基数排序思想
    ubuntu12.04 安装nginx+php+mysql (lnmp)的web服务器环境
    Linux常用命令及Vim使用
    Gcc手册(转)
    C语言标准
    匈牙利游戏(次短路问题)
    高级打字机
    矩阵乘法
  • 原文地址:https://www.cnblogs.com/sdutmyj/p/3240096.html
Copyright © 2020-2023  润新知