zoukankan      html  css  js  c++  java
  • upc组队赛6 GlitchBot【枚举】

    GlitchBot

    题目描述

    One of our delivery robots is malfunctioning! The job of the robot is simple; it should follow a list of instructions in order to reach a target destination. The list of instructions is originally correct to get the robot to the target. However, something is going wrong as we upload the instructions into the robot’s memory. During the upload, one random instruction from the list takes on a different value than intended. Yes,there is always a single bad instruction in the robot’s memory and it always results in the robot arriving at an incorrect destination as it finishes executing the list of instructions.
    The robot can execute the instructions “Left”, “Right”, and “Forward”. The “Left” and “Right” instructions do not result in spatial movement but result in a 90-degree turn in the corresponding direction. “Forward” is the only instruction that results in spatial movement, causing the robot to move one unit in the direction it is facing. The robot always starts at the origin (0, 0) of a grid and faces north along the positive y-axis.
    Given the coordinates of the target destination and the list of instructions that the robot has in its memory, you are to identify a correction to the instructions to help the robot reach the proper destination.

    输入

    The first line of the input contains the x and y integer coordinates of the target destination, where −50 ≤ x ≤ 50 and −50 ≤ y ≤ 50. The following line contains an integer n representing the number of instructions in the list, where 1 ≤ n ≤ 50. The remaining n lines each contain a single instruction. These instructions may be: “Left”, “Forward”, or “Right”.

    输出

    Identify how to correct the robot’s instructions by printing the line number (starting at 1) of an incorrect input instruction, followed by an instruction substitution that would make the robot reach the target destination. If there are multiple ways to fix the instructions, report the fix that occurs for the earliest line number in the sequence of instructions. There is always exactly one unique earliest fix.

    样例输入

    3 2
    11
    Forward
    Right
    Forward
    Forward
    Left
    Forward
    Forward
    Left
    Forward
    Right
    Forward
    

    样例输出

    8 Right
    

    题意

    有个机器人 Forward 向前走 Left向左转向 Right向右转向

    从(0,0)走到(xx,yy) n步操作,有一步操作是错的,要把他修改成其他操作到达(xx,yy)

    题解

    枚举每一个操作,将其改成其他两种操作,看能不能到达终点

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define pb push_back
    #define mp make_pair
    #define rep(i,a,n) for(int i=a;i<n;++i)
    #define readc(x) scanf("%c",&x)
    #define read(x) scanf("%d",&x)
    #define sca(x) scanf("%d",&x)
    #define sca2(x,y) scanf("%d%d",&x,&y)
    #define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define print(x) printf("%d
    ",x)
    #define mst(a,b) memset(a,b,sizeof(a))
    #define lowbit(x) x&-x
    #define lson(x) x<<1
    #define rson(x) x<<1|1
    #define pb push_back
    #define mp make_pair
    typedef long long ll;
    typedef pair<int,int> P;
    const int INF =0x3f3f3f3f;
    const int inf =0x3f3f3f3f;
    const int mod = 1e9+7;
    const int MAXN = 105;
    const int maxn =1000010;
    using namespace std;
    int xx,yy;
    int m;
    string s[55];
    string f[3] = {"Forward","Left","Right"};
    int dir[4][2] = {0,1,-1,0,0,-1,1,0}; //0上1左2下3右 left
    int x = 0,y = 0;
    
    bool solve(string s[]){
      x = y = 0;
      int ori = 0;
      for(int i = 0 ;i < m; i++){
        if(s[i] == f[0]){
          x += dir[ori][0];
          y += dir[ori][1];
        }
        else if(s[i] == f[1])
            ori = (ori + 1) % 4;
        else
          ori = (ori + 4 - 1) % 4;
      }
       return xx == x && yy == y;
    }
    int main(){
      ios::sync_with_stdio(false);
      cin >> xx >> yy >> m;
      for(int i = 0; i < m; i++) 
        cin >> s[i];
      for(int i = 0; i < m; i++){
        string tmp = s[i];
        for(int j = 0; j < 3; j++){
          if(s[i] == f[j]){
            for(int k = 0; k < 3; k++){
                if(j == k) continue;
                s[i] = f[k];
                if(solve(s)){
                  cout << i + 1 << " " << s[i]<< endl;
                  return 0;
                }
                s[i] = tmp;
            }
          }
        }
      }
      return 0;
    }
    
  • 相关阅读:
    python面试题目
    Mysql综合练习作业50题
    django rest framework自定义返回格式
    mongodb副本集部署
    celery学习笔记
    npm学习笔记
    awk学习笔记
    SaltStack grains学习笔记
    nginx + uwsgi + centos7部署django
    Reids集群安装
  • 原文地址:https://www.cnblogs.com/llke/p/10800125.html
Copyright © 2011-2022 走看看