Aiuto con bigsomma (1/100)

salve a tutti, sto provando a risolvere bigsomma ma non capisco come faccio a uscire di tempo… qualcuno che sa come posso risolvere??

grazie in anticipo!!

#include <iostream>
#include <cstdio>

using namespace std;

long long somma(FILE *f) {
    // leggi N
    int N;
    fscanf(f, "%d", &N);
    
    // leggi la sequenza e calcola la somma
    long long somma = 0;
    for (int i = 0; i < N; i++) {
        int valore;
        fscanf(f, "%d", &valore);
        somma += valore;
    }
    
    return somma;
}
1 Mi Piace

Questo non è un problema di implementazione. É una gara a chi legge più veloce da file quindi ti sconsiglio di provare a risolverlo come faresti per i problemi normali.

Metodo alternativo: Una strategia, se proprio vuoi provarci, é stampare valori casuali finché non li azzecca tutti :grin:

Grazie!!!

Ciao!

Anche io stavo cercando di risolverlo, ho questa bozza di funzione che almeno in parte mi sembra poter funzionare e penso sia anche abbastanza veloce.

Ma già con i primi due esempi sulle submission sembra non andare, mentre localmente a me va, quindi mi risulta un pò difficile testarla, qualcuno saprebbe aiutare?

long long somma(FILE *f) {
    size_t max_buffer_size_first_line = 8 * sizeof(char);
    char first_line[max_buffer_size_first_line];
    fgets(first_line, max_buffer_size_first_line, f);
    int N = atoi(strtok(first_line, "\n"));

    size_t max_buffer_size_second_line = (9 + 1) * N * sizeof(char);
    char *second_line;
    size_t parts = 1;
    while (1) {
        second_line = malloc(max_buffer_size_second_line);
        if (second_line != NULL)
            break;
        else {
            max_buffer_size_second_line /= 2;
            parts++;
        }
    }

    long long sum = 0;
    for (size_t part = 0; part < parts; part++) {
        fgets(second_line, max_buffer_size_second_line, f);
        char *token = strtok(second_line, " ");
        do {
            sum += atoi(token);
            token = strtok(NULL, " ");
        } while (token != NULL);
    }
    fclose(f);

    return sum;
}

Ciao, non ho letto attentamente il tuo codice, comunque è impossibile prendere più di 2/100 (o forse 3/100) su questo problema usando in modo naive le funzioni della libreria standard (tipo fgets, atoi e strtok). Comunque non vale la pena di perdere troppo tempo dietro a questo problema, almeno secondo me.