la solución del problema Luo Gu --P1042: Mesa de ping pong

temas relacionados

tema Enlace

Luo Valley, https://www.luogu.com.cn/problem/P1042 .

Mi DO, http://47.110.135.197/problem.php?id=4746 .

título Descripción

China y China llevó a cabo mediante el análisis, la primera bola del resultado de cada juego utiliza una lista y, a continuación, se calcularon conforme a la escala de 11 puntos y 21 puntos, los resultados de la competencia de los dos (al final de la comunicación).
Por ejemplo, ahora tienen un registro tal, (en el que W representa China y China para conseguir un punto, L representa un Chihuahua oponente gana un punto):
WWWWWWWWWWWWWWWWWWWWWWLW
bajo la escala de 11 puntos, cuando el resultado del juego es China y China el primer juego 11 a 0 Victoria , 0 a ganar el segundo juego 11, el tercer juego en curso, la puntuación actual de 11. En la escala de 21 puntos, esta vez el juego fue Chihuahua 21 0 Gana el primer juego, el segundo juego en curso, el resultado de 2 a 1. Si un juego acaba de empezar, esta vez el marcador era de 0-0. Minutos hasta que la diferencia es igual o mayor que 2, sólo el final de un juego.
Su programa es dar salida al resultado correcto de una serie de juegos para información de entrada (forma WL).

Formato de entrada

Cada archivo contiene una pluralidad de líneas de entrada de cadenas de caracteres, la cadena de W mayúscula, L y el formulario E. Donde E representa el final de la información del juego, el programa debe ignorar todo después de la E.

Formato de salida

De salida consta de dos partes, cada parte tiene una pluralidad de filas, cada fila corresponde a la puntuación de un juego (entrada de información del juego por el orden). Donde la primera parte es el resultado en la escala de 11 puntos, los resultados en la segunda parte se hace 21 puntos, separados por una línea en blanco entre las dos partes.

Ejemplo de entrada

WWWWWWWWWWWWWWWWWWWW
WWLWE

Ejemplo de salida

11:0
11:0
1:1

21:0
2:1

explicación

Hasta 25 caracteres por línea, hasta 2500 líneas.

tema de análisis

El análisis del significado de problemas

Se trata de una serie de preguntas de simulación. La entrada de caracteres, analiza la puntuación del juego correspondiente.

análisis de los datos de la muestra

De acuerdo con la muestra de entrada, hemos enumerado a continuación una tabla, los resultados del análisis de simulación de la entrada completa.

  puntuación de 11 puntos puntuación de 21 puntos
W 1: 0 1: 0
W 2: 0 2: 0
W 3: 0 3: 0
W 4: 0 4: 0
W 5: 0 5: 0
W 6: 0 6: 0
W 7: 0 7: 0
W 8: 0 8: 0
W 9: 0 9: 0
W 10: 0 10: 0
W 11: 0 11: 0
W 1: 0 12: 0
W 2: 0 13: 0
W 3: 0 14: 0
W 4: 0 15: 0
W 5: 0 16: 0
W 6: 0 17: 0
W 7: 0 18: 0
W 8: 0 19: 0
W 9: 0 20: 0
W 10: 0 21: 0
W 11: 0 1: 0
L 0: 1 1: 1
W 1: 1 2: 1
mi    

A partir de la tabla, podemos ver los cambios en la puntuación. Cuando la entrada E, seguimos la puntuación de salida requerida.

detalles algorítmicos

Cómo guardar la puntuación?

Yo uso la cola STL para guardar la puntuación. El principal es demasiado perezoso para pensar.

Poner fin a juzgar cada ronda?

Hay un pequeño margen de pits para prestar especial atención a al menos dos puntos, es decir, diferencia de puntos es igual o mayor que 2. Es decir, si una de 11 puntos, por lo menos uno de los 11 puntos o más, y un margen de 2 minutos. Similar método de determinación de 21 puntos. Yo uso la siguiente redacción:

if ((ans1[0]>=11 || ans1[1]>=11) && abs(ans1[0]-ans1[1])>=2) {
    ...
}

código de referencia AC

#include <iostream>
#include <queue>
#include <string>
#include <iostream>
#include <sstream>
#include <cmath>

using namespace std;

int main() {
    char ch;
    int ans1[2]={};//11分制比分, ans1[0]第一个人比分, ans1[1]第二人比分
    int ans2[2]={};//21分制比分

    queue<string> q1;//11分结果
    queue<string> q2;//21分结果

    while (cin>>ch) {
        if ('E'==ch) {
            ostringstream ostr1;
            ostr1 << ans1[0] << ":" << ans1[1];
            q1.push(ostr1.str());

            ostringstream ostr2;
            ostr2 << ans2[0] << ":" << ans2[1];
            q2.push(ostr2.str());

            break;
        } else {
            if ('W'==ch) {
                //Win
                ans1[0]++;
                ans2[0]++;
            } else if ('L'==ch) {
                //Los
                ans1[1]++;
                ans2[1]++;
            }

            //统计11分制结果
            if ((ans1[0]>=11 || ans1[1]>=11) && abs(ans1[0]-ans1[1])>=2) {
                ostringstream ostr;
                ostr << ans1[0] << ":" << ans1[1];
                q1.push(ostr.str());
                ans1[0] = 0;
                ans1[1] = 0;
            }

            //统计21分制结果
            if ((ans2[0]>=21 || ans2[1]>=21) && abs(ans2[0]-ans2[1])>=2)  {
                ostringstream ostr;
                ostr << ans2[0] << ":" << ans2[1];
                q2.push(ostr.str());
                ans2[0] = 0;
                ans2[1] = 0;
            }
        }
    }

    //输出
    while (false==q1.empty()) {
        cout << q1.front() << endl;
        q1.pop();
    }
    cout << endl;
    while (false==q2.empty()) {
        cout << q2.front() << endl;
        q2.pop();
    }

    return 0;
}

Título de la simulación, sin mayor dificultad, paso a paso, el tiempo necesario para escribir el código que puede, tal vez algunos temas el código un poco más, pero no hay ninguna dificultad.

Publicados 235 artículos originales · ganado elogios 289 · Vistas 1,07 millones +

Supongo que te gusta

Origin blog.csdn.net/justidle/article/details/104865808
Recomendado
Clasificación