zoukankan      html  css  js  c++  java
  • codeforce 606B Testing Robots

    题意:给定一个x*y的矩形,和一个机器人的初始位置(x0,y0)。以向下为x轴正方向,向右为y轴正方向。现在要对这个机器人进行多次测试。每次测 试,会在矩形的某个位置有一个矿井。所以一共要进行x*y次测试,每次测试,矿井会出现在一个之前的测试没有出现过的地方,而机器人的初始位置保持不变 (即为(x0,y0))。

    每次测试,机器人会沿一个给定的字符串走,字符串只可能包括'L', 'R', 'U', 'D',分别代表向左,向右,向上,向下。当然,如果机器人不能沿所给的方向走(就是走到了边缘),机器人会呆在原地一次。每次测试,机器人都按这个给定的字符串走。当机器人走到和矿井所在的位置重合时,机器人会爆炸,当机器人恰好走完这个字符串之后,机器人也会爆炸。

    现在想知道,机器人在走了第k步后(0<=k<=n,其中n为字符串的长度),有多少种测试情况会使机器人在恰好走了k步之后就爆炸了?

    思路:模拟一下,区分先前走过与没有走过。

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<memory.h>
     5 #include<string.h>
     6 #include<algorithm>
     7 #include<cmath>
     8 const int N = 30;
     9 const int inf=-100000;
    10 using namespace std;
    11 
    12 int g[510][510];
    13 int num;
    14 int X,Y,X0,Y0,xx,yy;
    15 int fun(char c)
    16 {
    17     int flag=0;
    18     switch(c)
    19     {
    20     case'R':
    21         if(yy<Y)
    22             yy++;
    23             break;
    24     case'L':
    25         if(yy>1)
    26             yy--;
    27             break;
    28     case'U':
    29         if(xx>1)
    30             xx--;
    31             break;
    32     case'D':
    33         if(xx<X)
    34         xx++;
    35         break;
    36     }
    37     if(g[xx][yy]==0)
    38     {
    39         flag=1;
    40         num--;
    41     }
    42     g[xx][yy]=1;
    43     return flag;
    44 }
    45 int main()
    46 {
    47     //int x,y,x0,y0;
    48     char str[100010];
    49     scanf("%d%d%d%d",&X,&Y,&X0,&Y0);
    50     scanf("%s",str);
    51     memset(g,0,sizeof(g));
    52     num=X*Y;
    53     num--;
    54     xx=X0,yy=Y0;
    55     g[X0][Y0]=1;
    56     cout<<"1 ";
    57     for(int i=0;i<strlen(str)-1;i++)
    58     {
    59         cout<<fun(str[i])<<" ";
    60     }
    61     if(fun(str[strlen(str)-1]))
    62     {
    63         num++;
    64         cout<<num<<endl;
    65     }
    66     else
    67     {
    68         cout<<num<<endl;
    69     }
    70     return 0;
    71 }
    View Code
  • 相关阅读:
    STL————vector的用法
    DFS,DP————N皇后问题
    DP经典问题—————(LCIS)最长公共上升子序列
    DP————LIS(最长上升子序列)和LCS(最长公共子序列)问题
    CentOS7使用firewalld打开关闭防火墙与端口
    CentOS7下安装MySQL5.7安装与配置(YUM)
    nginx + tomcat +redis 负载均衡遇到问题集锦
    centos 7 安装 tomcat
    centos 7 设置防火墙 开放指定端口
    centos 7 通过yum 安装 nginx
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5040170.html
Copyright © 2011-2022 走看看