Cod sursa(job #52916)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 20 aprilie 2007 12:19:42
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int N_MAX = 100010;

int N, v[N_MAX], is[N_MAX];

struct bla {
	int sum, rand, poz;
} a[N_MAX];

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

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

int cmp(bla a, bla b)
{
	return (a.rand > b.rand);
}

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]);
	}

	a[N].sum = v[N] + v[1], a[N].rand = v[N] + v[1] - (v[2] + v[N - 1]);
	a[N].poz = N;
	for (i = 1; i < N; i ++) {
		a[i].sum = v[i] + v[i + 1];
		a[i].rand = v[i] + v[i + 1] - (v[decr(i)] + v[incr(i + 1)]);
		a[i].poz = i;
	}

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

	int MAX = 0;
	for (i = 1; i <= N; i ++) {
		if (!is[a[i].poz] && !is[incr(a[i].poz)]) {
			is[a[i].poz] = 1;
			is[incr(a[i].poz)] = 1;
			MAX += a[i].sum;
			is[decr(a[i].poz)] = 1;
			is[incr(incr(a[i].poz))] = 1;
		}
	}

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