Noccioline due casi sbagliati

Salve. Sto provando a risolvere noccioline delle pre_oii, ma il mio codice sbaglia i casi 3 e 22, e non capisco dove possa essere l’errore. Il mio codice scorre il vettore dei “secchi” e conta quante noccioline mancano, e toglie questo numero a un contatore sum, che alla fine del ciclo permetterà di capire anche se sono andato in “credito” o in “debito” di noccioline. Grazie per l’aiuto.

#include <iostream>
#include <fstream>
#include <math.h>
#include <algorithm>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");


int n,k;
int v[20000];
int sum=0;
int ris;

int ContaOperazioni(int N, int K, int* secchi){
  n=N;
  k=K;
    int p=0;
    
    for(int i=0;i<n;i++){
        v[i]=secchi[i];
        p+=v[i];
    }
    
    sort(v,v+n);
    
bool flag=false;
    for(int i=n-1;i>=0;i--){
        if(v[i]<=k&&!flag){
            flag=true;
            ris=sum;
        }
        sum+=v[i]-k;
    }
    
    if(sum<0)return ris-sum;
   return ris;
    
}
1 Mi Piace

Ho provato un pò il tuo codice e non sono riuscito a trovare dove sbaglia; inoltre la logica mi sembra corretta. A questo punto suggerirei di trovare un metodo più semplice per trovare:

indizi per trovarlo:
puoi fare a meno di p,v,flag e sort trovando direttamente le due quantità che ti servono mentre adesso trovi una delle due per differenza.

1 Mi Piace

Ho trovato l’errore. Il mio programma sbagliava quando tutti i secchi avevano una quantità di noccioline superiore a k, perchè a “ris” non veniva dato nessun valore. Ora da 100. Grazie comunque per l’aiuto

2 Mi Piace