ZOJ 4034 Mahjong Sorting K preguntas para la 15a Competencia Provincial de Zhejiang

Clasificación de Mahjong

Límite de tiempo: 1 segundo      Límite de memoria: 65536 KB

DreamGrid acaba de encontrar un juego de Mahjong con fichas del mismo palo y una ficha de Dragón Blanco en su bolsillo. Cada ficha del mismo palo tiene un palo (Personaje, Bambú o Punto) y un rango (que va de 1 a), y hay exactamente una ficha de cada combinación de rango y palo.

Fichas de personajes cuyo rango va del 1 al 9

Baldosas de bambú cuyo rango va del 1 al 9

Cuadros de puntos cuyo rango varía de 1 a 9

Azulejo de dragón blanco

Como DreamGrid está aburrido, decide jugar con estas fichas. Primero selecciona uno de los adecuados azulejos como el "baldosas de suerte", luego le toma azulejos del conjunto de mosaicos y ordena estos mosaicos con las siguientes reglas:

  • La "ficha de la suerte", si está incluida en el azulejos, deben colocarse en la posición más a la izquierda.

  • Para dos baldosas y de modo que ninguno de ellos sea la "ficha de la suerte", si

    • es una ficha de personaje y es una teja de bambú, o

    • es una ficha de personaje y es un mosaico de puntos, o

    • es una teja de bambú y es un mosaico de puntos, o

    • y tienen el mismo traje y el rango de es menor que el rango de ,

    entonces debe colocarse a la izquierda de .

La ficha del Dragón Blanco es una ficha especial. Si está contenido en elfichas, se considera como la versión original (sin suerte) de la ficha de la suerte durante la clasificación. Por ejemplo, considere los siguientes mosaicos ordenados, donde se selecciona "3 caracteres" como el mosaico de la suerte. La ficha del Dragón Blanco, en este caso, se considera la versión original sin suerte de "3 caracteres" y debe colocarse entre "2 caracteres" y "4 caracteres".

Como DreamGrid es bastante olvidadizo, ¡inmediatamente olvida cuál es la ficha de la suerte después de la clasificación! Dado fichas ordenadas, indique a DreamGrid el número de fichas de la suerte posibles.

Aporte

Hay varios casos de prueba. La primera línea de la entrada contiene un número entero, indicando el número de casos de prueba. Para cada caso de prueba:

La primera línea contiene dos enteros y (, ), que indica el número de fichas ordenadas y el rango máximo de fichas del mismo palo.

Para el siguiente líneas, el -th línea describe el -ésima ficha ordenada contando de izquierda a derecha. La línea comienza con una letra mayúscula. (), indicando el traje del -th azulejo:

  • Si , luego un entero () sigue, lo que indica que es una ficha de personaje con rango ;

  • Si , luego un entero () sigue, lo que indica que es una loseta de bambú con rango ;

  • Si , luego un entero () sigue, lo que indica que es un mosaico de puntos con rango ;

  • Si , entonces es una loseta de White Drangon.

Se garantiza que existe al menos una ficha de suerte posible, y la suma de en todos los casos de prueba no excede .

Producción

Para cada caso de prueba, genera una línea que contiene un número entero, lo que indica el número de posibles fichas de la suerte.

Entrada de muestra

4 
3 9 
C 2 
W 
C 4 
6 9 
C 2 
C 7 
W 
B 3 
B 4 
D 2 
3100 
C 2 
W 
C 9 
3 9 
C 1 
B 2 
D 3

Salida de muestra

2 
4 
7 
25

Pista

Para la primera muestra, "2 caracteres" y "3 caracteres" son posibles fichas de la suerte.

Para la segunda muestra, "8 caracteres", "9 caracteres", "1 bambú" y "2 bambú" son posibles fichas de la suerte.



El significado del tema es Baidu. Clasifiquemos las posibilidades.

1. ¿Hay W    

2. Cero, uno, dos frente a W  

3. ¿Hay detrás de W?

c1 w c3 // Incluir el primero

c1 c2 w c4 // no incluye el primero

c1 w // todos

c2 w // No incluye el c2 anterior

c1 c2 w // Dos menos que arriba

pared

c1 // todo

w c2 // El primer lugar a c2

c1 b1 d1 // 3m-n + 1


#include <bits / stdc ++. h>
usando el espacio de nombres std;
int main ()
{     int n, shu;     long long int a, b;     int i, j, k, f;     long long int s = 0;     vector <int> ss;     char pai;     scanf ("% d", & n);     while (n--)     {         j = 0; f = 0; k = 0; ss.clear ();         scanf ("% d% d", & a, & b);         getchar ();         para (i = 0; i <a; i ++)         {             s = 0;             scanf ("% c", & pai);             getchar ();             si (pai == 'B') s = b;             si no (pai == 'D') s = b + b;             si no (pai == 'W'






















                 if (ss.size () == 1) {s = ss [ss.size () - 1]; ss.push_back (s);}
                 else if (ss.size () == 0) {ss.push_back ( 1); }
                 más si (ss.size ()> 1) {s = ss [ss.size () - 1] +1; ss.push_back (s);}
                continuar;
            }
            scanf ("% d", & shu);
            getchar ();
            s = s + shu;
            ss.push_back (s);
        }
        para (i = 0; i <ss.size () - 1; i ++)
        {             if (ss [i]> ss [i + 1]) {printf ("1 \ n"); k = 1; romper; }         }         si (k == 1) continuar;         if (f == 1)         {             if (ss.size () == 1) printf ("% d \ n", 3 * b);






            si no (j == a-1 && ss.size () == 2) printf ("% d \ n", (3 * b) -ss [j] +1);
            si no (j == a-1) printf ("% d \ n", (3 * b) -ss [j]);
            else printf ("% d \ n", ss [j + 1] -ss [j]);
        }
        if (f == 0)
        {             printf ("% d \ n", 3 * b-ss.size () + 1);         }     }     }






Supongo que te gusta

Origin blog.csdn.net/paycho/article/details/80186521
Recomendado
Clasificación