(Jizhong) 2192. Somme

(Fichier IO): entrée: sum.in sortie: sum.out
temps limite: 1000 ms limites de l' espace: 65536 KB restrictions spécifiques
Aller ProblemSet


Description du titre
donné n n nombre a 1.. a n A1..An , la valeur absolue de la somme minimum de deux nombres
-dire cherchent a i + a j | ai + aj | ( i je est différent de j j ) minimum


Entrez
un numéro de la première ligne n n
la ligne suivante n n nombre a 1.. a n A1..An

Sortie
ligne un nombre a n s ans valeur minimale, la valeur absolue de la somme de deux nombres


entrée d' échantillon
. 5
-2. 6. 7. 7 -8

Exemple de sortie
1


Limite de la plage de données
• Pour 40 40 % des données, n < = 1 0 3 1 0 6 < = a i < = 1 0 6 n <= 10 ^ 3, -10 ^ 6 <= ai <= 10 ^ 6 .
• Pour 80 80 % des données, n- $ <= 10. 5, -10. 6 <AI = <= 10. 6 ^.
• Pour 100 100 % des données, n < = 1 0 6 1 0 6 < = a i < = 1 0 6 n <= 10 ^ 6, -10 ^ 6 <= ai <= 10 ^ 6 .


Résolution des idées
d' abord avec la valeur absolue de chaque séquence de nombres en tant que clé de ligne, puis tous les deux nombres adjacents ensemble et chercher un minimum.


code

#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);
}
Publié 119 articles originaux · a gagné les éloges 8 · vues 4929

Je suppose que tu aimes

Origine blog.csdn.net/kejin2019/article/details/104694483
conseillé
Classement