Pagini recente » Borderou de evaluare (job #1868045) | Cod sursa (job #240683) | Cod sursa (job #646861) | Cod sursa (job #1673073) | Cod sursa (job #52916)
Cod sursa(job #52916)
#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;
}