• Codeforces 1028E. Restore Array


    题目直通车:http://codeforces.com/problemset/problem/1028/E

    解法:设原数组为ar[],求ar中的最大值的下标ins,依次向前遍历一遍,每一个答案值都为前一个答案值+余值(ar[i]),这样可以达到题意的要求

    输出为NO的情况就是所有ar元素相等且不为0

    麻烦的地方在于0值得特判,代码中有说明

    #include<iostream>
    #include<cstdio> 
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<string.h>
    #include<cstring>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<fstream>
    #include<cstdlib>
    #include<ctime>
    #include<list>
    #include<climits>
    #include<bitset>
    using namespace std;
    #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    #define fopen freopen("input.in", "r", stdin);freopen("output.in", "w", stdout);
    #define left asfdasdasdfasdfsdfasfsdfasfdas1
    #define tan asfdasdasdfasdfasfdfasfsdfasfdas
    typedef long long ll;
    typedef unsigned int un;
    const int desll[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    const ll mod=1e9+7;
    const int maxn=4e5+7;
    const int maxm=1e6+7;
    const double eps=1e-4;
    int m,n;
    int ar[maxn];
    ll ansl[maxn];
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)scanf("%d",&ar[i]);
        int ins=0,mx=0;
        for(int i=0;i<n;i++){
            if(mx<ar[i]){
                mx=ar[i];
                ins=i;
            }
        }
        int l=0,r=n-1;
        while(l<n && ar[l]==mx)l++;
        while(r>=0 && ar[r]==mx)r--;
        if(l==n){
            if(ar[0]>0){
                printf("NO
    ");
                return 0;
            }
        }
        if(l>0 && r<n-1){
            ins=r+1;
        }
        int i=ins;
        ins=0;
        ansl[i]=ar[i];
        if(mx==0 && l==n)ansl[i]=1;
        while(++ins<n){
            int j;
            if(i==0)j=n-1;
            else j=i-1;
            ansl[j]=ansl[i]+ar[j];
            if(ar[j]==0 && ansl[j]==mx)ansl[j]*=2;//特殊处理0
            i=j;
        }
        if((ar[i]==0 && ansl[i]==ansl[(i+1)%n]) || ansl[i]%ansl[(i+1)%n]==ar[i]){//前一部分特殊处理0
            printf("YES
    ");
            for(int i=0;i<n;i++){
                printf("%I64d%c",ansl[i],i!=n-1?' ':'
    ');
            }
        }
        else printf("NO
    ");
    
    
        return 0;
    }
  • 相关阅读:
    解决依赖的moduleBuildConfig.DEBUG总是未false的问题
    android异步处理机制
    Android 5.0 行为变更
    Android 6.0 变更
    Android 7.0 行为变更
    android 8.0变更
    Android 4.4 API
    Android常见问题集锦
    Android笔记汇总目录
    Delphi中Indy 10的安装和老版本的卸载
  • 原文地址:https://www.cnblogs.com/wa007/p/9557199.html
Copyright © 2020-2023  润新知