常见问题

当前位置: 首页>常见问题

CF Gym 100637F The Pool for Lucky Ones

来源:本站 发布时间:2024-03-05 浏览:84

#include<cstdio>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<algorithm>

using namespace std;

//#define local
typedef long long ll;
const int maxn=1e5+5;
int p[maxn];
int main()
{
#ifdef local
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
#endif // local
    int n;
    scanf("%d",&n);
    ll Max =0;
    int pos=-1;
    for(int i=0; i < n ;i++){
        scanf("%d",p+i);
        if(p[i]>Max){
            Max =p[i];pos=  i;
        }
    }
    if(Max==0){ printf("0"); return 0;}
    if(Max==1){
        int sum=p[0];
        bool canMerge=false;
        for(int i=1; i < n; i++){
            sum += p[i];
            if(p[i]&&p[i-1]) { canMerge=true; break;  }
        }
        if(canMerge) printf("2");
        else printf("%d",sum);
        return 0;
    }
    long long sum=0;
    bool canMerge=false;
    bool lessone=false;

    for(int i=pos; i < n; i++){
        if(p[i]==Max) sum += Max;
    }
    if(sum== Max){
        if(pos>0) { if(p[pos-1]<=p[pos]-3)lessone=true; }
        if(pos<n-1) { if(p[pos+1]<=p[pos]-3)lessone=true; }
        if(lessone) {
            for(int i=0; i < n; i++){
                if(p[i]==Max-1) {
                    printf("%d",Max);
                    return 0;
                }
            }
            printf("%d",Max-1);
        }
        else printf("%d",Max);
        return 0;
    }
    if(sum==Max*2){ //keng
        for(int i=pos; i < n; i++){
            if(p[i]== Max){
                if((i>0&& p[i-1]<=Max-2 )|| (i<n-1&& p[i+1] <=Max-2 ) ){
                     printf("%d",Max); return 0;
                }
            }
        }
        printf("%d",Max+1);
    }

    for(int i=pos; i < n; i++){
        if(p[i]== Max){
            if((i>0&& p[i-1])|| (i<n-1&& p[i+1] ) )
                { printf("%d",Max+1); return 0; }
        }
    }

    printf("%I64d",sum-Max);
    return 0;
}

推荐阅读