POJ2632

16 篇文章 0 订阅
#include <iostream>
#include <stdio.h>
#include <string.h>


using namespace std;
int gra[105][105];


struct node
{
    int xx,yy,sta;
}ro[105];


int k,a,b,n,m;


bool check( int x, int y)
{
    if(x > 0 && x <= a && y > 0 && y<=b)
     return true;
    return false;
}
int main()
{
   bool flag ;
   scanf("%d",&k);
   while(k--)
   {
       int x,y;
       char s;
       flag = false;
       scanf("%d %d",&a, &b);
    //cout<<"a"<<a<<" "<<"b"<<b<<endl;


       for( int i = 1;  i<=a; i++)
        for( int j = 1; j<=b; j++)
         gra[i][j] = -1;


       scanf("%d %d",&n, &m);
       for( int i = 1; i<=n; i++)
       {
           cin>>x>>y>>s;
           gra[x][y] = i;
           ro[i].xx = x;
           ro[i].yy = y;
           //cout<<"i"<<i<< "y"<<y<<endl;


           switch(s)
           {
               case 'N':
               {
                  ro[i].sta = 0;
                  break;
               }
                 case 'W':
               {
                  ro[i].sta = 1;
                  break;
               }
                 case 'S' :
               {
                 ro[i].sta = 2;
                  break;
               }
                 case 'E' :
               {
                  ro[i].sta = 3;
                  break;
               }
           }


    //cout<<"input cover"<<endl;
       }


       for( int i = 0; i<m; i++)
       {
           int num;
           int p;


           cin>>num>>s>>p;
          // cout<<ro[num].sta<<endl;


           if(flag)
            continue;
           switch (s)
           {
               case 'L':
               {   int rep;
                   rep = p%4;
                   ro[num].sta = (ro[num].sta+rep+4)%4;
                   //cout<<ro[num].sta<<endl;
                   break;
               }


               case 'R':
               {
                   int rep;
                   rep = p%4;
                   ro[num].sta = (ro[num].sta-rep+4)%4;
                   //cout<<ro[num].sta<<endl;
                   break;
               }
               case 'F':
               {
                   if(ro[num].sta == 0)
                    {
                       while(p--)
                      {
                        // cout<<p<<"   cxvdf"<<endl;
                         if(check(ro[num].xx,ro[num].yy+1))
                         {
                             gra[ro[num].xx][ro[num].yy] = -1;
                             if(gra[ro[num].xx][ro[num].yy+1]==-1)
                             {
                                 ro[num].yy++;
                                 //cout<<ro[num].xx<<" "<<ro[num].yy<<endl;
                             }


                            else
                            {


                             cout<<"Robot "<<num<<" crashes into robot "<<gra[ro[num].xx][ro[num].yy+1]<<endl;
                              flag = true;
                              break;
                            }
                            gra[ro[num].xx][ro[num].yy] = num;
                         }


                         else
                          {
                              cout<<"Robot "<<num<<" crashes into the wall"<<endl;
                                flag = true;
                                break;
                          }
                      }
                    }
                   else if(ro[num].sta == 1)
                    {


                       while(p--)
                       {
                         if(check(ro[num].xx-1,ro[num].yy))
                         {
                            gra[ro[num].xx][ro[num].yy] = -1;
                           if(gra[ro[num].xx-1][ro[num].yy]==-1)
                             {
                                 ro[num].xx--;
                                  //cout<<ro[num].xx<<" "<<ro[num].yy<<endl;
                             }


                            else
                            {
                                cout<<"Robot "<<num<<" crashes into robot "<<gra[ro[num].xx-1][ro[num].yy]<<endl;
                                flag = true;
                                break;
                            }
                            gra[ro[num].xx][ro[num].yy] = num;
                         }


                         else
                          {
                                cout<<"Robot "<<num<<" crashes into the wall"<<endl;
                                flag = true;
                                break;
                          }
                     }
                    }
                   else if(ro[num].sta == 2)
                     {
                       while(p--)
                        {
                        if(check(ro[num].xx,ro[num].yy-1))
                         {  gra[ro[num].xx][ro[num].yy] = -1;
                            if(gra[ro[num].xx][ro[num].yy-1]==-1)
                             {
                                 ro[num].yy--;
                                 //cout<<ro[num].xx<<" "<<ro[num].yy<<endl;
                              }


                            else
                            {


                            cout<<"Robot "<<num<<" crashes into robot "<<gra[ro[num].xx][ro[num].yy-1]<<endl;
                              flag = true;
                              break;
                            }
                            gra[ro[num].xx][ro[num].yy] = num;
                         }
                         else
                          {
                            cout<<"Robot "<<num<<" crashes into the wall"<<endl;
                            flag = true;
                            break;


                          }
                        }
                       }
                   else if(ro[num].sta == 3)
                    {
                       while(p--)
                      {
                          //cout<<"p     "<<p<<endl;
                           if(check(ro[num].xx+1,ro[num].yy))
                          { gra[ro[num].xx][ro[num].yy] = -1;
                            if(gra[ro[num].xx+1][ro[num].yy]==-1)
                             {
                                 ro[num].xx++;
                              // cout<<ro[num].xx<<" "<<ro[num].yy<<endl;
                             }


                             else
                            {
                              cout<<"Robot "<<num<<" crashes into robot "<<gra[ro[num].xx+1][ro[num].yy]<<endl;
                              flag = true;
                              break;
                            }
                          gra[ro[num].xx][ro[num].yy] = num;
                         }


                         else
                          {
                               cout<<"Robot "<<num<<" crashes into the wall"<<endl;
                               flag = true;
                               break;
                          }
                      }
                    }


                    break;
               }


           }




       }


       if(!flag)
        cout<<"OK"<<endl;
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值