Ho questo codice in Python (il quale da’ soluzione corretta):
#!/usr/bin/env python3
# NOTE: it is recommended to use this even if you don't understand the following code.
# input data
N = int(input().strip())
S = list(map(int, input().strip().split()))
S.sort()
res = 1
candy = 1
for i in range(1, len(S)):
if S[i] != S[i-1]:
candy += 1
res += candy
print(res) # print the result
L’ho riprodotto in C++ nel seguente modo:
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
typedef unsigned int uint;
int main(int argc, char** argv) {
ifstream in("input.txt");
ofstream out("output.txt");
uint N;
in >> N;
vector<uint> S(N);
for (uint i = 0; i < N; i++)
in >> S[i];
sort(S.begin(), S.end(), less<uint>());
uint res = 1, candy = 1;
for(size_t i = 1; i < S.size(); i++) {
if(S[i] != S[i - 1])
candy += 1;
res += candy;
}
out << res << endl;
in.close();
out.close();
}
Ma per qualche motivo da’ output non corretti.
So che esiste un metodo molto piu’ ottimizzato tramite la formula n(n+1)/2
e qualche accorgimento speciale per quando ci sono due numeri uguali ma il metodo greedy ha funzionato per cui…
Sapreste dirmi come mai non funziona quello in C++ ma quello in Python si’?