Soluciones de problemas de pares de números Luogu P1102 AB

tema

par AB

Antecedentes de la pregunta

¡Escribir preguntas es algo doloroso!

Leer las mismas preguntas demasiadas veces provocará fatiga estética, así que abandoné el conocido problema A+B y cambié a AB, ¡jaja!

Descripción de la pregunta

Dada una secuencia de números enteros positivos y un número entero positivo CCC , se requiere calcular todos los que cumplanA − B = CA − B = CAB=El número de pares de números en C (los mismos pares de números en diferentes posiciones se cuentan como pares de números diferentes).

Formato de entrada

Introduzca un total de dos líneas.

La primera línea, dos números enteros positivos N, CN, Cnorte ,C. _

Segunda fila, NNSe utilizan N enteros positivos como cadena de números que deben procesarse.

Formato de salida

Una línea, que indica que la cadena de números enteros positivos satisface A − B = CA - B = CAB=El número de pares de números en C.

Ejemplo 1

Entrada de muestra n.° 1

4 1
1 1 2 3

Salida de muestra n.° 1

3

pista

Para el 75% 75\%75% de los datos,1 ≤ N ≤ 2000 1 \leq N \leq 20001norte2000 .

Por 100 % 100\%100% de los datos,1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^51norte2×1 050 ≤ ai < 2 30 0 \leq a_i <2^{30}0ayo<2301 ≤ C < 2 30 1 \leq C < 2^{30}1C<230 .

29/4/2017 Se agregaron dos nuevos conjuntos de datos

portal

https://www.luogu.com.cn/problem/P1102

código

#include<bits/stdc++.h> // 包含所有常用的库文件
using namespace std;
long long n,c,a[200005],ans; // 声明变量

int main() {
    
    
    map<int,int> m; // 创建一个空的映射对象 (map),用于统计元素个数
    cin >> n >> c; // 从标准输入读取n和c的值

    for(int i = 1; i <= n; i++) {
    
     // 从1循环到n
        cin >> a[i]; // 从标准输入读取一个整数,并赋值给数组a的第i个元素
        m[a[i]]++; // 使用映射对象m统计数组a中每个元素的个数
    }

    for(int i = 1; i <= n; i++) {
    
    
        ans += m[a[i] + c]; // 使用映射对象m查询数组a中与当前元素a[i]相差c的元素个数,并累加到变量ans中
    }

    cout << ans << endl; // 输出结果ans到标准输出
    return 0; // 程序正常结束的返回语句
}

explicar

  1. #include<bits/stdc++.h>: Esta es una directiva de preprocesamiento que se utiliza para incluir todos los archivos de biblioteca de uso común, lo que elimina el problema de agregar manualmente cada archivo de biblioteca.

  2. using namespace std;: Se utiliza stdun espacio de nombres para que las funciones y objetos de la biblioteca estándar de C++ se puedan usar directamente sin prefijos std::.

  3. long long n, c, a[200005], ans;: Declara variables enteras n y c, una matriz de enteros largos a y una variable entera larga ans.

  4. int main() { : La función de entrada del programa.

  5. map<int,int> m;: Se crea un objeto mnombrado map, siendo el tipo de clave un número entero inty el tipo de valor también un número entero int.

  6. cin >> n >> c;: Lea dos números enteros n y c de la entrada estándar y asígnelos a las variables n y c respectivamente.

  7. for(int i = 1; i <= n; i++) { : Repita n veces, ejecutando el siguiente bloque de código cada vez.

  8. cin >> a[i];: Lee un número entero de la entrada estándar y asígnalo al i-ésimo elemento de la matriz a.

  9. m[a[i]]++;: Utilice el valor del i-ésimo elemento de la matriz a como clave y agregue 1 al valor de mapeo correspondiente.

  10. for(int i = 1; i <= n; i++) ans += m[a[i] + c];: Repita n veces, ejecutando el siguiente bloque de código cada vez. Calcule el valor obtenido por a [i] + c como clave, busque el valor de mapeo correspondiente en el objeto de mapa m y agréguelo a la variable ans.

  11. cout << ans << endl;: Envía el valor de ans a la salida estándar.

  12. return 0;: Declaración de devolución cuando el programa finaliza normalmente.

Este código utiliza mapuna estructura de datos para contar el número de elementos específicos en la matriz a, calcula el número de combinaciones calificadas en función de la diferencia c dada y genera el resultado.

prueba personal

Prueba personal CA
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Python_enjoy/article/details/133488421
Recomendado
Clasificación