Buonasera a tutti,
stavo provando a risolvere l’esercizio chess tournament solo che non riesco a totalizzare 100/100.
Il primo tentativo che ho svolto mi risolve a 58/100 perchè mi da fuori tempo massimo (ecco il codice):
#include <fstream>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ifstream fin("input.txt");
ofstream fout("output.txt");
int N;
int n = 0;
int max = 0;
fin >> N;
vector<int> S;
for (int i = 0; i < N; i++) {
int a;
fin >> a;
S.push_back(a);
}
for(int i = 0; i < N; i++) {
for(int j = i + 1; j < N; j++) {
n = abs(S[i] - S[j]) + abs(i - j);
if (n > max) {
max = n;
}
}
}
fout << max;
Allora ho ragionato sulla soluzione e ho visto che il risultato si poteva scrivere come l’elemento massimo (max) - elemento minimo (min) più la differenza dei due indici ed ho scritto questo:
#include <fstream>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ifstream fin("input.txt");
ofstream fout("output.txt");
int N;
int n = 0;
int max = 0;
fin >> N;
vector<int> S;
for (int i = 0; i < N; i++) {
int a;
fin >> a;
S.push_back(a);
}
int minIndex = 0;
int maxIndex = 0;
int min = S[0];
int max = S[0];
for (int i = 0; i < N; i++) {
if (max < S[i]) {
max = S[i];
maxIndex = i;
}
}
for (int i = N - 1; i >= 0; i--) {
if (min > S[i]) {
min = S[i];
minIndex = i;
}
}
n = abs(max-min) + abs(maxIndex-minIndex);
fout << n;
Ma questa volta mi da 25/100 perchè il subtask 2 presenta alcuni test case con output errato mentre l’ultimo subtask da tutti output errati. Sapreste dirmi dove sbaglio?
Grazie Mille!