Soluzione in Python funziona, quella in C++ no

Link al problema

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’?

Molto probabilmente, il numero da restituire, non è rappresentabile con soli 4byte :sob:
Linkare il problema potrebbe anche essere utile, non sono akinator :face_exhaling:

1 Mi Piace

Oddio scusami, ho aggiornato il post con il link al problema. Comunque avevi ragione, il problema era proprio di Integer Overflow. Non so come ho fatto a non pensarci :joy:. Grazie mille :slight_smile: