Cod sursa(job #52977)

Utilizator peanutzAndrei Homorodean peanutz Data 20 aprilie 2007 15:29:37
Problema Secventa 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <memory.h>

#define NMAX 50010
long n;
long a[NMAX];
//int sol[NMAX];
long long solsuma[NMAX];
long sol1[NMAX];
long sol2[NMAX];

long solve()
{
	long i, nr = 0;
	long max = -1;

	for(i = 1; i <= n; ++i)
	{
		scanf("%ld\n", &a[i]);
		solsuma[i] = a[i] + solsuma[i-1];

		sol1[i] = sol1[i-1];
		sol2[i] = sol2[i-1];

		if(a[i] % 3 == 1)
			++sol1[i];
		else if(a[i] % 3 == 2)
			++sol2[i];
		else
			++nr;


		if(solsuma[i] % 3 == 0)
			max = i;
		else if(solsuma[i] % 3 == 1 && sol1[i] > 0)
		{
			max = i-1;
		}
		else if(solsuma[i] % 3 == 2)
		{
			if(sol2[i] > 0)
				max = i-1;
			else if(sol1[i] > 1 && i-2 > max)
				max = i-2;
		}
	}

	if(nr > max)
		max = nr;

	return max;
}

int main()
{
	long i;
	freopen("secvente.in", "r", stdin);
	freopen("secvente.out", "w", stdout);

	for(i = 0; i < 3; ++i)
	{
		scanf("%ld\n", &n);

		printf("%ld\n", solve());

		//memset(sol, 0, sizeof(sol));
		memset(a, 0, sizeof(a));
		memset(sol1, 0, sizeof(sol1));
		memset(sol2, 0, sizeof(sol2));
		memset(solsuma, 0, sizeof(solsuma));
	}

	fclose(stdin);
	fclose(stdout);

	return 0;
}