#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\n");
        for(int i=1;i<=n;i++)
            printf("1 ");//都是零让答案一样即可,此处选择全部输出1
        return 0;
    }
    if(!flag)
        printf("NO");
    else{
        printf("YES\n");
        long long mx=0;
        for(int i=1;i<=n;i++){
            if(a[i]>mx)
                mx=a[i];
        }
        //printf("%d\n",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;
}

AIM Tech Round 5 (rated, Div. 1 + Div. 2) E(思维,构造)的更多相关文章

  1. AIM Tech Round 5 (rated, Div. 1 + Div. 2) (A, B, E)

    B.Unnatural Conditions 题目链接 : http://codeforces.com/contest/1028/problem/B #include<iostream> ...

  2. AIM Tech Round 5 (rated, Div. 1 + Div. 2)

    A. Find Square 找到对角线的两个点的坐标,这道题就迎刃而解了. inline void work(int n) { int m; cin >> m; memset(str, ...

  3. AIM Tech Round 5 (rated, Div. 1 + Div. 2) C. Rectangles 【矩阵交集】

    题目传传传送门:http://codeforces.com/contest/1028/problem/C C. Rectangles time limit per test 2 seconds mem ...

  4. AIM Tech Round 5 (rated, Div. 1 + Div. 2) D(SET,思维)

    #include<bits/stdc++.h>using namespace std;const long long mod = 1e9+7;char s[370007][27];long ...

  5. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】

    又是爆炸的一场 心态有点小崩.但问题不大.. 看A题,一直担心有多个正方形..小心翼翼地看完之后,毅然地交上去了. [00:08] A[Accpted] 然后开始看B题. 觉得和之前做的某题很像,但翻 ...

  6. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) A】 Find Square

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找到左上角.往下一直走,往右一直走走到B边界就好. 中点的话.直接输出中位数 [代码] #include <bits/stdc ...

  7. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让a+b的和为100000000...0这样的形式就好了 这样s(a+b)=1<=m就肯定成立了(m>=1) 然后至于s ...

  8. 【 AIM Tech Round 5 (rated, Div. 1 + Div. 2) C】Rectangles

    [链接] 我是链接,点我呀:) [题意] 给你n个矩形. 让你找出一个点(x,y) 使得这个点在其中至少(n-1)个矩形中. [题解] 若干个矩形交在一起的话. 它们所有的公共区域也会是一个矩形. 这 ...

  9. Codeforces AIM Tech Round 5 (rated, Div. 1 + Div. 2)

    A. Find Square time limit per test: 1 second memory limit per test: 256 megabytes input: standard in ...

随机推荐

  1. Luogu P1377 [TJOI2011]树的序:离线nlogn建二叉搜索树

    题目链接:https://www.luogu.org/problemnew/show/P1377 题意: 有一棵n个节点的二叉搜索树. 给出它的插入序列,是一个1到n的排列. 问你使得树的形态相同的字 ...

  2. Codeforces 463D Gargari and Permutations:隐式图dp【多串LCS】

    题目链接:http://codeforces.com/problemset/problem/463/D 题意: 给你k个1到n的排列,问你它们的LCS(最长公共子序列)是多长. 题解: 因为都是1到n ...

  3. Linux课程---6、别名管理和网络配置(Linux命令如何记)

    Linux课程---6.别名管理和网络配置(Linux命令如何记) 一.总结 一句话总结: 理解记忆:因为命令要实现那么多功能,必须有那么多参数,而不同的参数就适用不用的情况 命令基本格式:命令关键字 ...

  4. node.js+express+jade系列七:富文本编辑框的使用

    下载nicEdit富文本编辑框, 把nicEdit.js文件放到public/javascripts/下 新建jade文件:代码如下 doctype htmlhtml    head        t ...

  5. vue2.0使用Sortable.js实现的拖拽功能

    简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jQuery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...

  6. Python习题-列出目录下所有文件删除文件夹

    需求描述: 1.当前目录下有很多文件夹.文件,统计/usr/local/这个目录下,如果是文件夹,就给删除 /usr/local/ f1    w1   f2   w2   w3   w4       ...

  7. HNOI2004宠物收养所(splay维护二叉搜索树模板题)

    描述 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

  8. noipd2t3列队

    吉老师的题还真是难呢... 正解至今不会,只会平衡树的做法 这种用平衡树上一个点表示一段区间的题还真要做做...想起来挺难受的 建n棵平衡树表示每行的m-1个元素 再建一棵平衡树维护最后一列 中间要支 ...

  9. bzoj3573米特运输

    题意: 给定一棵树上的边和点权 改动点权使得每个父节点u容量为子节点容量的d[u](子节点个数)倍 考察点: 1.这是一道语文题 2.点权很大 直接算会爆 有一种优化办法:取log(醉 这是什么优化) ...

  10. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...