zoukankan      html  css  js  c++  java
  • AIM Tech Round 5 (rated, Div. 1 + Div. 2) E(思维,构造)

    #include<bits/stdc++.h>
    using namespace std;
    long long a[150007];
    long long ans[150007];
    int main(){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%lld",&a[i]);
        }
        int flag=0;
        for(int i=2;i<=n;i++){
            if(a[i]!=a[i-1]){//全部一样且并不全为0则无答案
                flag=1;
                break;
            }
        }
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(a[i]==0)
                cnt++;
        }
        if(cnt==n){
            printf("YES ");
            for(int i=1;i<=n;i++)
                printf("1 ");//都是零让答案一样即可,此处选择全部输出1
            return 0;
        }
        if(!flag)
            printf("NO");
        else{
            printf("YES ");
            long long mx=0;
            for(int i=1;i<=n;i++){
                if(a[i]>mx)
                    mx=a[i];
            }
            //printf("%d ",mx);
            if(a[1]==mx&&a[1]>a[n])
                flag=1;
            for(int i=2;i<=n;i++){
                if(a[i]==mx&&a[i]>a[i-1])
                    flag=i;//找到最后一个最大值并且a[i]>a[i-1]开始递推
            }
            if(flag==n){
                ans[flag]=a[flag];
                ans[flag-1]=ans[flag]*2+a[flag-1];//不*2的情况给出一组反例例如3    0 1 0 则output1 1 1 *2后output2 1 2就避免了最大值对后面的值%时出现<=的情况
                for(int i=flag-2;i>=1;i--){
                    ans[i]=ans[i+1]+a[i];//根据观察构造的函数
                }
                for(int i=1;i<=n;i++)
                    printf("%lld ",ans[i]);
            }
            else if(flag!=1){//类似上一个if
                ans[flag]=a[flag];
                ans[flag-1]=ans[flag]*2+a[flag-1];
                for(int i=flag-2;i>=1;i--){
                    ans[i]=ans[i+1]+a[i];
                }
                ans[n]=ans[1]+a[n];
                for(int i=n-1;i>flag;i--){
                    ans[i]=ans[i+1]+a[i];
                }
                for(int i=1;i<=n;i++)
                    printf("%lld ",ans[i]);
            }
            else if(flag==1){//类似上一个if
                ans[flag]=a[flag];
                ans[n]=ans[1]*2+a[n];
                for(int i=n-1;i>=2;i--){
                    ans[i]=ans[i+1]+a[i];
                }
                for(int i=1;i<=n;i++)
                    printf("%lld ",ans[i]);
            }
        }
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    使用VideoView开发视频总结
    后台接口向数据库录入汉字时乱码以及自动过滤文字经验总结
    8 Crash Reporting Tools For iOS And Android Apps
    Best Mobile Crash Reporting Software
    How do I obtain crash-data from my Android application?
    ACRA (Automated Crash Reporting for Android)
    Debugging Neural Networks with PyTorch and W&B
    OpenPose MobileNet V1
    Real-time-human-pose-estimation-by-pytorch
    openpose-pytorch
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10277155.html
Copyright © 2011-2022 走看看