Cod sursa(job #2127678)

Utilizator adriangh3Adrian Gheorghiu adriangh3 Data 10 februarie 2018 21:49:01
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("oo.in");
ofstream out("oo.out");
typedef long long int ll;
#define LENGTH 100001
int v[LENGTH], v2[LENGTH];
ll sum[LENGTH], sum2[LENGTH];
bool ver[LENGTH],ver2[LENGTH];

int main()
{
	int n, i;
	in >> n;
	for (i = 1; i <= n; i++)
	{
		in >> v[i];
		v2[i + 1] = v[i];
	}
	v2[1] = v[n];
	v[n + 1] = 0;
	sum[2] = v[1] + v[2];
	ver[2] = 1;
	for (i = 3; i <= n-1; i++)
	{
		if (ver[i - 1])
		{
			if (sum[i - 1] < sum[i - 3] + v[i] + v[i - 1])
			{
				ver[i - 1] = 0;
				sum[i] = sum[i - 3] + v[i] + v[i - 1];
				ver[i] = 1;
			}
			else sum[i] = sum[i - 1];
		}
		else if (ver[i - 2])
		{
			if (sum[i - 2] < sum[i - 4] + v[i - 1] + v[i])
			{
				ver[i - 2] = 0;
				sum[i] = sum[i - 4] + v[i - 1] + v[i];
				ver[i] = 1;
			}
			else sum[i] = sum[i - 2];
		}
		else
		{
			sum[i] = v[i] + v[i - 1] + sum[i - 3];
			ver[i] = 1;
		}
	}
	sum2[2] = v2[1] + v2[2];
	ver2[2] = 1;
	for (i = 3; i <= n - 1; i++)
	{
		if (ver2[i - 1])
		{
			if (sum2[i - 1] < sum2[i - 3] + v2[i] + v2[i - 1])
			{
				ver2[i - 1] = 0;
				sum2[i] = sum2[i - 3] + v2[i] + v2[i - 1];
				ver2[i] = 1;
			}
			else sum2[i] = sum2[i - 1];
		}
		else if (ver2[i - 2])
		{
			if (sum2[i - 2] < sum2[i - 4] + v2[i - 1] + v2[i])
			{
				ver2[i - 2] = 0;
				sum2[i] = sum2[i - 4] + v2[i - 1] + v2[i];
				ver2[i] = 1;
			}
			else sum2[i] = sum2[i - 2];
		}
		else
		{
			sum2[i] = v2[i] + v2[i - 1] + sum2[i - 3];
			ver2[i] = 1;
		}
	}
	out << max(sum[n - 1], sum2[n - 1]);
	return 0;
}