Problema Drop it!

Sto riprovando a fare Drop it perché non ho niente da fare. Mi sembra di aver capito il testo in maniera corretta, ma aldilà di questo il secondo testcase me lo da sbagliato nonostante in locale sia giusto. L’unica cosa è che aprendo output.txt con blocco note mi stampa:

317 2 15

invece di:

3
17 2 15

Su notepad++ però me lo visualizza in modo corretto. é possibile che questo crei qualche problema?

Non dovrebbe creare problemi, blocco node non interpreta bene i caratteri di nuova linea di linux (usi cygwin?)
Senza codice e/o una descrizione di quello che fai, non ti posso aiutare molto sull’algoritmo.

Dario

1 Mi Piace

Non sono sicuro ma il secondo testcase potrebbe non corrispondere all’esempio sul testo.

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream fin("input.txt");
ofstream fout("output.txt");

int main(){

int N;
fin>>N;

stack<int> p;
vector<int> f;

int oldi=0;
for(int i=0;i<N;i++,oldi++){
    int cur;
	
    if(i>=oldi){
		fin>>cur;
		oldi=i;
	}
    if(p.empty()){
		//cout<<"insert "<<cur<<endl;
		p.push(cur);
		oldi=i;
	}
    else if(cur==p.top()){
        p.pop();
		oldi=i;
    }
    else if(cur<p.top()){
		int temp=p.top();
		p.push(cur);
                p.push(temp-cur);
		oldi=i;
    }
    else{
		int temp=p.top();
		p.pop();
		i--;
		cur-=temp;
    }
}

fout<<p.size()<<"\n";
while(!p.empty()){
	f.push_back(p.top());
	p.pop();
}

for(int i=f.size()-1;i>=0;i--)
	fout<<f[i]<<" ";
	
return 0;
}

Quella brutta cosa di i e oldi serve per continuare la caduta nel terzo caso, ma è probabile che sia li l’errore. A livello teorico questo problema mi è molto chiaro, non so perché faccio fatica a metterlo in codice. Qualsiasi aiuto è oro.

Se facessi un metodo cadi, e lo richiamassi per ogni elemento che inserisci, e dunque anche nel metodo stesso se uscisse il terzo caso chiamassi il metodo cadi sulla differenza? :slight_smile: