(Jizhong) 2192. Suma

(File IO): entrada: sum.in salida: sum.out
límite de tiempo: 1000 ms limitaciones de espacio: 65536 restricciones KB específicos
Goto Boletín de problemas


Descripción del título
dado n norte número a 1.. a n a1..an , el valor absoluto de la suma mínima de dos números
es decir buscan a i + a j | ai + aj | ( i yo no es igual a j j ) mínimo


Introduzca
un número de la primera fila n norte
la línea siguiente n norte número a 1.. a n a1..an

Salida
número de línea de una a n s años valor mínimo, el valor absoluto de la suma de dos números


entrada de la muestra
. 5
-2. 6. 7. 7 -8

Resultado de muestra
1


límite de rango de datos
• Para 40 40 % de los datos, n < = 1 0 3 1 0 6 < = a i < = 1 0 6 n <= 10 ^ 3, -10 ^ 6 <= EA <= 10 ^ 6 .
• Para 80 80 % de los datos, $ n- <= 10. 5, -10. 6 <AI = <= 10. 6 ^.
• Para 100 100 % de los datos, n < = 1 0 6 1 0 6 < = a i < = 1 0 6 n <= 10 ^ 6, -10 ^ 6 <= EA <= 10 ^ 6 .


Solución de las ideas
primero con valor absoluto de cada secuencia de números como una clave de fila, y luego cada dos números adyacentes juntos y buscar un mínimo.


código

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,a[1000000],ans;
bool cmp(int x,int y)
{
	return abs(x)<abs(y);
}
int main()
{
	freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1,cmp);
    ans=2147483647;
    for(int i=2;i<=n;i++)
    {
    	if(abs(a[i]+a[i-1])<ans)
    	ans=abs(a[i]+a[i-1]);
	}
    printf("%d",ans);
}
Publicados 119 artículos originales · ganado elogios 8 · vistas 4929

Supongo que te gusta

Origin blog.csdn.net/kejin2019/article/details/104694483
Recomendado
Clasificación