#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
main(){
int n,temp=0,max=-1;
vector <int> vet;
ifstream in("input.txt");
ofstream out("output.txt");
in>>n;
for(int i=0;i<n;i++){
in>>temp;
vet.push_back(temp);
}
sort(vet.begin(),vet.end(),greater<int>());
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
temp=vet[i]+vet[j];
if(temp%2==0 && temp>max){
max=temp;
break;
}
}
}
out<<max;
}
Il tuo algoritmo è troppo lento per risolvere l’ esercizio nel tempo richiesto.
Devi riuscire a risolverlo in meno di un secondo.
In questo momento la complessità del tuo algoritmo è N log(N) + N ^ 2 data dal ordinamento più quei due cicli for.
Quando N assume valori di 10^5 devi trovare una soluzione lineare O(N) o N log(N).
Se hai già ordinato i valori, devi necessariamente provare ogni combinazione ?
Ciao Jack, ho tolto un ciclo for e modificato un pò il programma, adesso mi da 100!! Grazie mille per l’aiuto.
1 Mi Piace