#include #define MAX_N 102400 // massima dimensine dell'array in input using namespace std; int V[MAX_N]; int M, S; int max( int a, int b ) { return a > b ? a : b; } int percorri_a_verme() // funzione che fa tutto il lavoro (greedy) { int N=0, sum=0; // N e' il miglior risultato ottenuto fino a questo momento, int x1=0, x2=0; // e ora sto considerando l'intervallo [x1,x2] che avra' somma "sum" while (x2 <= M) { // cout << "[" << x1 << "," << x2 << "]=" << sum << endl; // stampa di debug if (sum == S) N = max( N, x2-x1 ); // sto considerando un intervallo valido, quindi // me lo ricordo if (sum <= S) { // se ho una somma troppo piccola, allargo l'intervallo sum = sum + V[x2]; x2++; } else { // se ho una somma troppo grande, riduco l'intervallo sum = sum - V[x1]; x1++; } } return N; // quando il mio intervallo esce dai limiti dell'array, non ci sono // piu' cose utili da considerare } int main() { cin >> M >> S; for (int i=0; i> V[i]; } cout << endl; V[M] = S+1; // per evitare problemi con gli ultimi elementi cout << percorri_a_verme() << endl; // stampo l'output return 0; }