Cod sursa(job #51994)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 17 aprilie 2007 16:04:58
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int N_MAX = 100010;

struct kkt {
	int val, poz;
} v[N_MAX];

int is[N_MAX], N;

int cmp(kkt a, kkt b)
{
	return (a.val > b.val);
}

int incr(int x)
{
	return (x == N ? 1 : x + 1);
}

int decr(int x)
{
	return (x == 1 ? N : x - 1);
}

int main()
{
	freopen("oo.in", "r", stdin);
#ifndef _SCREEN_
	freopen("oo.out", "w", stdout);
#endif

	int i;
	
	scanf("%d\n", &N);
	for (i = 1; i <= N; i ++) {
		scanf("%d ", &v[i].val);
	}

	int aux = v[1].val;
	for (i = 1; i < N; i ++) {
		v[i].val += v[i + 1].val;
		v[i].poz = i;
	}
	v[N].val += aux;
	v[N].poz = N;

	sort(v + 1, v + N + 1, cmp);

	int MAX = 0;
	for (i = 1; i <= N; i ++) {
		if (!is[v[i].poz] && !is[incr(v[i].poz)]) {
			is[v[i].poz] = 1;
			is[incr(v[i].poz)] = 1;
			MAX += v[i].val;

			is[decr(v[i].poz)] = 1;
			is[incr(incr(v[i].poz))] = 1;
		}
	}

	printf("%d\n", MAX);
	
	return 0;
}