Tabla de contenido
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 = CA−B=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 = CA−B=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 20001≤norte≤2000 .
Por 100 % 100\%100% de los datos,1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^51≤norte≤2×1 05,0 ≤ ai < 2 30 0 \leq a_i <2^{30}0≤ayo<230,1 ≤ C < 2 30 1 \leq C < 2^{30}1≤C<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
-
#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. -
using namespace std;
: Se utilizastd
un espacio de nombres para que las funciones y objetos de la biblioteca estándar de C++ se puedan usar directamente sin prefijosstd::
. -
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. -
int main() {
: La función de entrada del programa. -
map<int,int> m;
: Se crea un objetom
nombradomap
, siendo el tipo de clave un número enteroint
y el tipo de valor también un número enteroint
. -
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. -
for(int i = 1; i <= n; i++) {
: Repita n veces, ejecutando el siguiente bloque de código cada vez. -
cin >> a[i];
: Lee un número entero de la entrada estándar y asígnalo al i-ésimo elemento de la matriz a. -
m[a[i]]++;
: Utilice el valor del i-ésimo elemento de la matriz a como clave y agregue 1 al valor de mapeo correspondiente. -
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. -
cout << ans << endl;
: Envía el valor de ans a la salida estándar. -
return 0;
: Declaración de devolución cuando el programa finaliza normalmente.
Este código utiliza map
una 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