Rifiuti da riciclare 0/100

Ciao ragazzi sto svolgendo il problema qui sopra e sto riscontrando parecchi problemi, non sono molto esperto e facendo il submit di questo programma mi viene restituito in molti test error signal 6, che cosa significa ? Inoltre vorrei sapere se fosse possibile vedere gli input nei vari test perché non sapendo quale input causa l’errore si va un po’ alla cieca…
Ecco il codice
2022-03-29 22_54_28-Allenamenti Olimpiadi Italiane di Informatica e altre 5 pagine - Profilo 1 - Mic

Penso che sia accesso a memoria non allocata: molto probabilmente la variabile j accede a una posizione non lecita di P.
Ti consiglio di non usare la funzione pow e di pre-calcolare le potenze di 2. Non solo ottimizzi i tempi ma eviti errori di precisione dovuti ai decimali.
Inoltre, se non conosci come avviene l’input e output del programma, non usare:

ios::sync_with_stdio(false)

potrebbero succedere cose non molto belle soprattutto con problemi interattivi.
P.S
Per postare il codice, basta racchiuderlo tra ```. Una riga sopra il codice, e una riga sotto.

Sono riuscito a risolvere il problema dell’out of range e ho sostituito pow con una funzione creata da me, solo che quando sottometto il problema ci mette troppo a eseguirsi e alcuni output non sono coretti dandomi 5/100 se hai qualche idea per ottimizzarlo e dirmi dove sto sbagliando mi saresti di grande aiuto

#include <bits/stdc++.h>

using namespace std;
long long binpow(long long a, long long b) {
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}
long long riciclo(int N, int M, vector<int> T, vector<int> P) {
    long long int temp,j=0,somma=0;
     sort(T.begin(),T.end());
     for(long long int i=0;i<N;i++){
         while(true){
             while(P.at(j)==0){
                 if((P.back()==0)&&(j==M-1)){
                     break;
                 }else{
                 j++;
                 }
             }
             if((P.back()==0)&&(j==M-1)){
                     break;
             }
             if(T.at(i)<binpow(2,j)){
                 break;
             }else{
             T.at(i)=T.at(i)-binpow(2,j);
             P.at(j)=P.at(j)-1;
             somma++;
         }
         }
         if((P.back()==0)&&(j==M-1)){
                     break;
             }
     }
  return somma;
}

Non ho troppa voglia di stare a guardare al codice quindi non ti rispondo alle domande che hai fatto, pero’ ti posso dire che 2^k lo puoi calcolare con 1ll<<k se sta in 64 bit.