[CSP-S 2022] Juegos de estrategia

[CSP-S 2022] Juegos de estrategia

Descripción del Título:

La pequeña L y la pequeña Q están jugando un juego de estrategia.

Existe un arreglo A con una longitud de n y un arreglo B con una longitud de m, sobre esta base, se define una matriz C con un tamaño de n×m, que satisface Cij​=Ai​×Bj​. Todos los subíndices comienzan en 1.

En el juego se jugarán un total de q rondas, en cada ronda del juego se darán por adelantado 4 parámetros l1​, r1​, l2​, r2​, satisfaciendo 1≤l1​≤r1​≤n, 1 ≤l2​≤r2 ​≤m.

En el juego, el pequeño L primero elige un subíndice x entre l1​∼r1​, y luego el pequeño Q elige un subíndice y entre l2​∼r2​. El puntaje que define a los dos jugadores en esta ronda es Cxy​.

El objetivo de la pequeña L es hacer que este puntaje sea lo más grande posible, y el objetivo de la pequeña Q es hacer que este puntaje sea lo más pequeño posible. Al mismo tiempo, ambos son jugadores lo suficientemente inteligentes como para adoptar la estrategia óptima cada vez.

Me gustaría preguntar: De acuerdo con la estrategia óptima de los dos, ¿cuáles son los puntajes de cada ronda del juego?

Formato de entrada:

La primera línea ingresa tres números enteros positivos n, m, q, que representan la longitud de la matriz A, la matriz B y el número de rondas de juego, respectivamente.

La segunda línea: n enteros, que representan Ai​, que representan respectivamente los elementos de la matriz A.

La tercera línea: m enteros, que representan Bi​, que representan respectivamente los elementos de la matriz B.

Las siguientes q líneas, cada una con cuatro números enteros positivos, representan l1​, r1​, l2​, r2​ de este juego.

Formato de salida:

Da salida a un total de q líneas, y cada línea es un número entero, que representa respectivamente las puntuaciones de Little L y Little Q bajo la estrategia óptima en cada ronda del juego.

Ejemplo de entrada y salida:

Entrada #1:

3 2 2 
0 1 -2 
-3 
4 1 
3 1 2 2 3 2 2

Salida #1:

0 
4

Entrada #2:

6 4 5 
3 -1 -2 1 2 0 
1 2 -1 -3 
1 6 1 4 
1 5 
1 4 1 4 1 2 2 
6 3 4 
2 5 2 3

Salida #2:

0 
-2 
3 
2 
-1

Instrucciones/Consejos

[Explicación de ejemplo #1]

En este conjunto de datos, la matriz C es la siguiente:

En la primera ronda del juego, no importa si el pequeño L elige x=2 o x=3, el pequeño Q tiene una forma de elegir un cierto y para que el puntaje final sea negativo. Por lo tanto, es óptimo para L pequeño elegir x=1, porque la puntuación debe ser 0.

En la segunda ronda del juego, como el pequeño L puede elegir x=2, el pequeño Q solo puede elegir y=2, por lo que el puntaje es 4.

[Ejemplo #3]

Ver adjunto  game/game3.in vs. game/game3.ans

[Ejemplo #4]

Ver adjunto  game/game4.in vs. game/game4.ans

【rango de datos】

Para todos los datos, 1≤n,m,q≤10^5, −10^9≤Ai​,Bi​≤10^9. Para cada ronda de juego, 1≤l1​≤r1​≤n, 1≤l2​≤r2​≤m.

 

Número de punto de prueba norte, metro, q ≤ condiciones especiales
1 200 1, 2
2 200 1
3 200 2
4∼5 200 ninguno
6 1000 1, 2
7∼8 1000 1
9∼10 1000 2
11∼12 1000 ninguno
13 10^5 1, 2
14∼15 10^5 1
16~17 10^5 2
18∼20 10^5 ninguno

Entre ellas, la propiedad especial 1 es: garantía Ai​,Bi​>0.
La propiedad especial 2 es: garantizar que para cada ronda del juego, l1​=r1​ o l2​=r2​. 

Ideas:

La descripción de la matriz es una venda en los ojos. Traduce el tema:

El pequeño L elige una x en a[l1​⋯r1​], y luego el pequeño Q elige una y en b[l2​⋯r2​], el puntaje es x×y, y el pequeño L quiere que el puntaje sea tan grande como sea posible, y pequeña Q Quiero que la fracción sea lo más pequeña posible. Encuentra la puntuación.

Es decir, el pequeño L tiene la iniciativa, y después de que el pequeño L elija, el pequeño Q elegirá un número de él, de modo que Cxy​ sea el más pequeño posible, y el pequeño L elegirá el mayor de todos los Cxy​ posibles. .

Simulemos lo que sucede.

  • Tanto la pequeña L como la pequeña Q solo pueden elegir números enteros positivos. En este momento, la pequeña L elegirá el entero positivo más grande y la pequeña Q elegirá el entero positivo más pequeño.

  • Tanto la pequeña L como la pequeña Q solo pueden elegir números negativos. En este momento, la pequeña L elegirá el número negativo más pequeño y la pequeña Q elegirá el número negativo más grande.

  • La pequeña L solo puede elegir números enteros positivos, y la pequeña Q puede elegir tanto números positivos como negativos. En este momento, la pequeña L elegirá el entero positivo más pequeño y la pequeña Q elegirá el número negativo más pequeño.

  • La pequeña L solo puede elegir números negativos, y la pequeña Q puede elegir tanto números positivos como negativos. En este momento, la pequeña L elegirá el número negativo más grande y la pequeña Q elegirá el entero positivo más grande.

  • El pequeño L puede elegir números positivos y negativos, y el pequeño Q solo puede elegir números positivos. En este momento, el pequeño L elegirá el número positivo más grande y el pequeño Q elegirá el número positivo más pequeño.

  • La pequeña L puede elegir números positivos y negativos, y la pequeña Q solo puede elegir números negativos. En este momento, la pequeña L elegirá el número negativo más pequeño y la pequeña Q elegirá el número negativo más grande.

  • La pequeña L puede elegir números positivos y negativos, y la pequeña Q puede elegir números positivos y negativos, y la respuesta será diferente en este momento. Cuando Little L elige un número entero positivo, Little Q elegirá el número negativo más pequeño; cuando Little L elige un número negativo, Little Q elegirá el número positivo más grande. En este caso, no importa cómo elijas, el resultado debe ser un número negativo. Si queremos hacer que este número negativo sea lo más grande posible, entonces pequeño L debe elegir un número con un valor absoluto relativamente pequeño al elegir un número, que es decir, la pequeña L debe elegir un número positivo. El valor mínimo del número o el valor máximo del número negativo. En este momento, los números seleccionados por la pequeña Q son el número negativo más pequeño y el número positivo más grande, y el número máximo Se puede utilizar el valor de los dos casos.

A través del análisis anterior, encontramos que los primeros 6 casos se obtienen todos de los valores máximo y mínimo en ambos lados, y solo el último caso involucra el valor mínimo en el número positivo y el valor máximo en el número negativo de la secuencia ai​.

Cuando contamos las respuestas, solo necesitamos tomar el caso del valor mínimo y máximo de las dos opciones de valor extremo, y luego juzgar si existe el séptimo caso y tomar el valor máximo.

En cuanto a la consulta de los valores extremos de las dos sucesiones, dado que no se trata de ninguna operación de modificación, podemos utilizar la tabla ST para mantener la información de las dos sucesiones.

La complejidad de preprocesamiento de la tabla ST es O(nlogn+mlogm), la complejidad de consulta de la tabla ST es O(1), un total de q consultas, por lo que la complejidad de tiempo total es O(nlogn+mlogm+q).

Código completo:

#include <bits/stdc++.h>
#define int long long
inline int read() {
    int x = 0;
    bool f = true;
    char ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-')
            f = false;
    for (; isdigit(ch); ch = getchar())
        x = (x << 1) + (x << 3) + ch - '0';
    return f ? x : (~(x - 1));
}
inline int max(int a, int b) {
    return a > b ? a : b;
}
inline bool gmx(int &a, int b) {
    return b > a ? a = b, true : false;
}
inline int min(int a, int b) {
    return a < b ? a : b;
}

const int maxn = (int)1e5 + 5;
const int maxm = (int)1e5 + 5;
const int mlgn = 25;
const int mlgm = 25;

int amx[maxn][mlgn], amn[maxn][mlgn], afx[maxn][mlgn], azn[maxn][mlgn];
int bmx[maxm][mlgm], bmn[maxm][mlgm];

// 6 个 ST 表
// amx:a 的区间最大值,amn:a 的区间最小值,afx:a 的负数区间最大值,azn:a 的非负数区间最小值。
// bmx:b 的区间最大值,bmn:b 的区间最小值。

int lg[maxn];

const int maxinf = LONG_LONG_MAX, mininf = LONG_LONG_MIN;

signed main() {
    int n = read(), m = read(), q = read();
    for (int i = 1; i <= n; ++i) {
        int x = read();
        amx[i][0] = amn[i][0] = x;
        afx[i][0] = (x < 0 ? x : mininf);
        azn[i][0] = (x >= 0 ? x : maxinf);
    }

    for (int i = 1; i <= m; ++i) {
        int x = read();
        bmx[i][0] = bmn[i][0] = x;
    }

    for (int i = 2; i <= max(n, m); ++i)
        lg[i] = lg[i >> 1] + 1;

    for (int j = 1; j <= lg[n]; ++j) {
        for (int i = 1; i + (1 << j) - 1 <= n; ++i) {
            int p = i + (1 << (j - 1));
            amx[i][j] = max(amx[i][j - 1], amx[p][j - 1]);
            afx[i][j] = max(afx[i][j - 1], afx[p][j - 1]);
            amn[i][j] = min(amn[i][j - 1], amn[p][j - 1]);
            azn[i][j] = min(azn[i][j - 1], azn[p][j - 1]);
        }
    }

    for (int j = 1; j <= lg[m]; ++j) {
        for (int i = 1; i + (1 << j) - 1 <= m; ++i) {
            int p = i + (1 << (j - 1));
            bmx[i][j] = max(bmx[i][j - 1], bmx[p][j - 1]);
            bmn[i][j] = min(bmn[i][j - 1], bmn[p][j - 1]);
        }
    }

    while (q--) {
        int la = read(), ra = read(), lb = read(), rb = read();
        int sa = lg[ra - la + 1], sb = lg[rb - lb + 1];
        int pa = ra - (1 << sa) + 1, pb = rb - (1 << sb) + 1;

        int amax = max(amx[la][sa], amx[pa][sa]);
        int amin = min(amn[la][sa], amn[pa][sa]);
        int afmx = max(afx[la][sa], afx[pa][sa]);
        int azmn = min(azn[la][sa], azn[pa][sa]);
        int bmax = max(bmx[lb][sb], bmx[pb][sb]);
        int bmin = min(bmn[lb][sb], bmn[pb][sb]);

        int ans = mininf;

        gmx(ans, amax * (amax >= 0 ? bmin : bmax));
        gmx(ans, amin * (amin >= 0 ? bmin : bmax));
        if (afmx != mininf)
            gmx(ans, afmx * (afmx >= 0 ? bmin : bmax));
        if (azmn != maxinf)
            gmx(ans, azmn * (azmn >= 0 ? bmin : bmax));
        printf("%lld\n", ans);
    }
    return 0;
}

Resumir:

El T2 más fácil de todos. 

Cuando vi esta pregunta al principio, pensé: "【】, ¿has mejorado la teoría del juego del examen grupal?"

Pero no, esta es una pregunta codiciosa muy estúpida. Solo necesita simular todas las situaciones posibles manualmente para obtener la respuesta correcta.

Enlace del tema:

[CSP-S 2022] Juego de estrategia - Luogu https://www.luogu.com.cn/problem/P8818

Supongo que te gusta

Origin blog.csdn.net/wo_ai_luo_/article/details/131213709
Recomendado
Clasificación