sdnuoj 1052. Problema de agua 3 (Robot repugnante)

Descripción

LG es una chica, esto es bien conocido por todos,
pero lg tiene mal gusto, nadie puede saberlo.
Está bien, como nadie lo sabe,
olvidémoslo . LG tiene robots que pueden moverse de acuerdo con las instrucciones del control remoto. Las
instrucciones específicas son las siguientes:
H & * ^ kf30pq El robot camina un paso
f03u5klfj # El robot camina dos pasos
lsuf9823ur El robot camina tres pasos
skhf9832ht El robot camina cuatro pasos
jdsifu9w8e El robot regresa al punto de partida
% ^ Ihdfskjf El robot comienza a explotar cuenta regresiva
# % ^%^ cxk Cuenta regresiva hasta el final de la
detonación del robot Error de análisis de KaTeX: Se esperaba 'EOF', obtuvo '#' en la posición 1: # ̲% ^ # tids robot lanza
autodetonación 98dfgoier # El robot corrió aleatoriamente hacia una esquina determinada
cuando el robot inició la cuenta regresiva Explotará automáticamente después de ejecutar otros 10 comandos de no finalización o de autodetonación.
Si la autodetonación está activada, explotará directamente. Si el robot recibe una orden de correr aleatoriamente a una esquina determinada, no encontrará su posición.
Ahora el control remoto está en manos de syc , LG quiere recuperar su robot, pero solo tiene el conjunto de instrucciones de syc, así que juzgue si el robot se puede recuperar

Entrada

Instrucciones relacionadas

Salida

Si lg puede saber exactamente cuántos pasos dio el robot y el robot no explotó, se puede recuperar y generar Y; de lo contrario, generar N

Entrada de muestra

Inserte la descripción de la imagen aquí

Salida de muestra

Y

Pregunta: Darle instrucciones relevantes para determinar si puede encontrar el robot sin explotar y conocer el número específico de pasos.

Pit: Hay demasiadas instrucciones, deslumbrantes, y si juzgas directamente una cadena muy larga, se agotará (hay dos métodos, uno es usar map, el otro es la primera letra de la cadena que usaré a continuación, lo que puede reducir considerablemente el tiempo de cadena de caracteres de comparación). También está el problema de correr y perder, que requiere un análisis cuidadoso. Luego hay muchas variables que se utilizan en el juicio, que son más complicadas, por lo que hay que distinguirlas.

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <stdlib.h>
#include <sstream>
#include <map>
#include <set>
using namespace std;

typedef long long ll;

const int M = (int)1e7;
const int N = (int)1e5;
const double eps = 1e-9;
const int inf = 0x3f3f3f3f;
const ll mod = (ll)998244353;
//map 用法如下
//mp <string, int> tr;
//
//tr["H"] = 1;//走一步
//tr["f03u5klfj#"] = 2;//走两步
//tr["lsuf9823ur"] = 3;//走三步
//tr["skhf9832ht"] = 4;//走四步
//tr["jdsifu9w8e"] = 0;//回到起点
//tr["%^Ihdfskjf"] = 5;//开始
//tr["#$%^%$^cxk"] = 6;//结束
//tr["$#%^#$tids"] = 7;//爆炸
//tr["98dfgoier#"] = 8;//跑了

int zou = 0;//看看开始走了没有
int num = 0;//计算一下有没有到十个指令
int ans = 0;//如果num满10 ,则赋1,或者爆了也赋1,
int pao = 0;//看看跑丢了没,跑了就赋0,回到起点就赋1

int main()
{
    
    
    string s, ss;
    while(cin>>s)
    {
    
    
        if(s[0] == 'H' || s[0] == 'f' || s[0] == 'l' || s[0] == 's')//判断首字母
        {
    
    
            if(zou)//如果之前开始走了,则zou = 1,所以可以进行这个语句,让num++
                num++;

        }
        else if(s[0] == 'j')//回到起点
        {
    
    

            pao = 0;//这个赋0是因为可能出现先跑丢,然后又跑回原点的情况,这个时候就能收回
            if(zou)
                num++;

        }
        else if(s[0] == '%')//开始
        {
    
    
            zou = 1;
        }
        else if(s[0] == '#')//终止爆炸
        {
    
    
           // k = 1;//终止爆炸,如果没跑丢,这个东西我本来想单独开一个是否爆炸,和不爆炸的,后来发现可以和ans合在一起,就省了
            zou = 0;
            num = 0;
        }
        else if(s[0] == '$')//爆炸
        {
    
    
            ans = 1;
        }
        else if(s[0] == '9')
        {
    
    
            pao = 1;
        }
        if(num == 10)
        {
    
    
            ans = 1;
        }
    }
        if(ans == 1 || pao == 1)
        {
    
    
            cout<<"N"<<endl;
        }
        else if(ans == 0 && pao == 0)
        {
    
    
            cout<<"Y"<<endl;
        }

        return 0;
}














Hay otro error, es decir, no hay suficientes diez en este ejemplo. Cuando lo ejecutas, debes cambiar la línea y presionar Ctrl + z, luego ejecutar

Supongo que te gusta

Origin blog.csdn.net/weixin_51216553/article/details/109889582
Recomendado
Clasificación