Cod sursa(job #2118072)

Utilizator MihneaGhiraMihnea MihneaGhira Data 29 ianuarie 2018 23:25:38
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<fstream>
#include<algorithm>
#define x first
#define y second
using namespace std;
ifstream fin("oo.in");
ofstream fout("oo.out");
int n,i,k,s,ok;
int v[100005],f[100001];
pair <int,int> p[100005];
int main(){
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<n;i++){
        p[++k].x=v[i]+v[i+1];
        p[k].y=i;
    }
    p[++k].x=v[n]+v[1];
    p[k].y=n;
    sort(p+1,p+k+1);
    for(i=k;i>=1;i--){
        ok=0;
        if(p[i].y+1==n+1){
            if(f[1]==1)
                ok=1;
        }
        else{
            if(f[p[i].y+1]==1)
                ok=1;
        }
        if(p[i].y+2==n+2){
            if(f[2]==1)
                ok=1;
        }
        else{
            if(f[p[i].y+2]==1)
                ok=1;
        }
        if(p[i].y-1==0){
            if(f[n]==1)
                ok=1;
        }
        else{
            if(f[p[i].y-1]==1)
                ok=1;
        }
        if(f[p[i].y]==0&&ok==0){
            s+=p[i].x;
            f[p[i].y]=1;
            if(p[i].y+1==n+1)
                f[1]=1;
            else
                f[p[i].y+1]=1;
            if(p[i].y-1==0)
                f[n]=1;
            else
                f[p[i].y-1]=1;
            if(p[i].y+2==n+2)
                f[2]=1;
            else{
                if(p[i].y+2==n+1)
                    f[1]=1;
                else
                    f[p[i].y+2]=1;
            }

        }
    }
    fout<<s;
    return 0;
}