Perfect Pizza (Ragionamento sbagliato?)

Ragionamento sbagliato?

#include <iostream>
#include <vector>

using namespace std;

long long N, M, i, j;
vector<vector<double>> P;
vector<double> R;

int main() {
    cin >> N >> M;
    P.resize(N);
    R.resize(N);
    for (i=0; i<N; i++)
        P[i].resize(M);
    for (j=0; j<M; j++)
        for (i=0; i<N; i++)
            cin >> P[i][j];

    double sum = 0; 
    int t = 1, c = 0;
    for (j=0; j<M; j++) {
        for (i=0; i<N; i++) {
            sum += P[i][j];
        }
        if((sum*2) == 1000000) {
            for (i=0; i<N; i++)
                P[i][j] *= 2;
        }
        else {
            for(i=3; i<N, c == 1; i++) {
                if((sum*i) == 1000000) {t = i; c = 1;}
            }
            for (i=0; i<N; i++)
                P[i][j] *= t;
        }
        sum = 0;
        t = 1;
        c = 0;
    }

    for (j=0; j<M; j++) {
        for (i=0; i<N; i++) {
            R[i] += P[i][j];
        }
    }
    
    for (i=0; i<N; i++)
        cout << (int)R[i] / M << " ";
    cout << endl;
    return 0;
}

Ciao, il ragionamento di base è giusto ma ci sono un po’ di problemi nel codice:
La matrice dovrebbe avere dimensione M*N dove M è il numero di ricette e N è il numero di ingredienti. Di conseguenza la P[i][j] (dove i scorre le ricette e j gli ingredienti) indica “l’ingrediente j-esimo della ricetta i-esima”.
A questo punto, giustamente, metti ciascun ingrediente in proporzione con 1000000. Per farlo però cerchi “manualmente” il rapporto intero scorrendoli tutti finche non ne trovi uno che va bene. Questa cosa può essere fatta semplicemente con t=1000000.0/sum.
Il resto va bene, aggiustando gli indici.
Altra cosa, con i double metti sempre i numeri con “.0” alla fine per evitare che l’operazione trasformi il float in intero.

1 Mi Piace