//
// main.cpp
// yidian1
//
// Created by zjl on 16/9/29.
// Copyright © 2016年 zjl. All rights reserved.
//
#include <iostream>
#include <vector>
using namespace std;
int solve(vector<int>num, int n){
if(n <= 3)
return 0;
vector<int>count(n,0);
for(int i = 0; i < n; i++){
count[i] = num[(n+i-1)%n] + num[(n+i+1)%n] + num[i];
}
int nn = n;
int sum = 0;
while(nn > 3){
int part_sum = count[0] > 0 ? count[0]: 0;
int pos = 0, maxn = count[0];
for(int i = 1; i < n; i++){
if(count[i] == 0) continue;
part_sum += count[i];
if(count[i] > maxn){
maxn = count[i];
pos = i;
}
}
sum += part_sum/3 - count[pos];
nn -= 3;
if(nn <= 3) break;
count[pos] = 0;
int left = (n+pos-1)%n;
int right = (n+pos+1)%n;
while(1){
if(count[left] > 0)
break;
left = (left-1+n)%n;
}
while(1){
if(count[right] > 0)
break;
right = (right+1+n)%n;
}
count[left] = 0;
count[right] = 0;
int left1 = (n+left-1)%n;
int right1 = (n+right1+1)%n;
while(1){
if(count[left1] > 0)
break;
left1 = (left1-1+n)%n;
}
while(1){
if(count[right1] > 0)
break;
right1 = (right1+1+n)%n;
}
count[left1] = count[left1]-num[left] + num[right1];
count[right1] = count[right1]-num[right]+num[left1];
}
return sum;
}
int main(int argc, const char * argv[]) {
// insert code here...
int n;
while(cin>>n){
vector<int>num(n,0);
for(int i = 0; i < n; i++)
cin>>num[i];
int res = solve(num, n);
cout<<res<<endl;
}
return 0;
}
一点资讯2
最新推荐文章于 2022-10-28 10:53:56 发布