# Monete a posto(monete) output errato

**URL:** <https://forum.olinfo.it/t/monete-a-posto-monete-output-errato/8161>\
**Category:** Aiuto\
**Created:** [6 Aprile 2023, 7:47am UTC](https://forum.olinfo.it/t/monete-a-posto-monete-output-errato/8161 "2023-04-06T07:47:47Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![LorenzoBalda](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/l/f07891/32.png) [@LorenzoBalda](https://forum.olinfo.it/u/LorenzoBalda)\
**Post date:** [6 Aprile 2023, 7:47am UTC](https://forum.olinfo.it/t/monete-a-posto-monete-output-errato/8161/1 "2023-04-06T07:47:48Z")

</div>

Ho scritto questo codice per risolvere monete a posto(monete) e l’idea è quella di spostare dal nodo figlio a quello di sopra le monete necessarie a portare il figlio ad 1(aggiungendo o togliendo da sopra), gli esempi li fa bene ma sul sito mi da output errato per tutti i case e non capisco perché. Qualcuno ha un esempio di input su cui il mio codice sbaglia?

```auto
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int N;
    cin>>N;
    vector<int> V(N);
    for(int i = 0; i<N; i++){
        cin>>V[i];
    }
    vector<int> F(N-1);
    for(int i = 0; i<N-1; i++){
        cin>>F[i];
    }
    int ans=0;
    for(int i=N-2; i>=0; i--){
        if(V[i+1]>1){
            V[F[i]-1]+=V[i+1]-1;
            ans+=V[i+1]-1;
            V[i+1]=1;
        }
        else{
            if(V[i+1]<1){
                V[F[i]-1]-=1-V[i+1];
                ans+=1-V[i+1];
                V[i+1]=1;
            }
        }/*
        cout<<endl;
        for(int i = 0; i<N; i++){
            cout<<V[i];
        }
        cout<<endl;
        for(int i = 0; i<N-1; i++){
            cout<<F[i];
        }
        cout<<endl;*/
    }
    cout<<ans;

    return 0;
}

```

---

<div class="post-metadata">

**Author:** ![qwfwq](https://forum.olinfo.it/user_avatar/forum.olinfo.it/qwfwq/32/2974_2.png) [@qwfwq](https://forum.olinfo.it/u/qwfwq)\
**Post date:** [7 Aprile 2023, 8:11am UTC](https://forum.olinfo.it/t/monete-a-posto-monete-output-errato/8161/2 "2023-04-07T08:11:55Z")

</div>

Prova con questo input:  
5  
5 0 0 0 0  
4 4 1 1

---

<div class="post-metadata">

**Author:** ![LorenzoBalda](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/l/f07891/32.png) [@LorenzoBalda](https://forum.olinfo.it/u/LorenzoBalda)\
**Post date:** [7 Aprile 2023, 3:23pm UTC](https://forum.olinfo.it/t/monete-a-posto-monete-output-errato/8161/3 "2023-04-07T15:23:39Z")

</div>

Ho sistemato il codice per risolvere questo errore ripetendo tutto in un do while finche le monete non sono tutte ad 1, però il sito mi da ancora output errato per tutti e non capisco perché.

```auto
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int N;
    cin>>N;
    vector<int> V(N);
    for(int i = 0; i<N; i++){
        cin>>V[i];
    }
    vector<int> F(N-1);
    for(int i = 0; i<N-1; i++){
        cin>>F[i];
    }
    int ans=0;	
    int T=0;
	do{
		T=0;
		for(int i=N-2; i>=0; i--){
        	if(V[i+1]>1){
        	    V[F[i]-1]+=V[i+1]-1;
        	    ans+=V[i+1]-1;
       	    	V[i+1]=1;
        	}
        	else{
            	if(V[i+1]<1){
                	V[F[i]-1]=V[F[i]-1]-(1-V[i+1]);
                	ans+=1-V[i+1];
                	V[i+1]=1;
            	}
        	}
        }
        for(int i = 1; i<N; i++){
        	if(V[i]!=1){
        		T=1;
        		break;
			}
		}
	}
	while(T==1);
    cout<<ans;

    return 0;
}

```

---

<div class="post-metadata">

**Author:** ![Mazza7](https://forum.olinfo.it/user_avatar/forum.olinfo.it/mazza7/32/2689_2.png) [@Mazza7](https://forum.olinfo.it/u/Mazza7)\
**Post date:** [7 Aprile 2023, 4:30pm UTC](https://forum.olinfo.it/t/monete-a-posto-monete-output-errato/8161/4 "2023-04-07T16:30:09Z")

</div>

Se aggiungi la lettura e scrittura da file il codice fa 100
