zoukankan      html  css  js  c++  java
  • Codeforces Round #507 (Div. 2)C(贪心,逆向遍历,构造)

    #include<bits/stdc++.h>
    using namespace std;
    int order[300007];
    long long t[300007],ans[300007];
    int main(){
        int n;
        long long m;
     scanf("%d%lld",&n,&m);
     for(int i=1;i<=n;i++)
      scanf("%lld",&t[i]);
     t[n+1]=2e18;
     for(int i=1;i<=n;i++)
      scanf("%d",&order[i]);
     for(int i=1;i<=n;i++)
      if(order[i]<i)
       return puts("No"),0;
     for(int i=1;i<n;i++)
      if(order[i]>order[i+1])
       return puts("No"),0;
     for(int i=n;i>0;i--)
      ans[order[i]]=t[order[i]+1]+m-1;//从后往前是为了尽可能放大空间
     for(int i=n;i>0;i--)
      if(!ans[i])
       ans[i]=ans[i+1]-1;//贪心
     for(int i=1;i<n;i++)
      if((order[i]>i)&&(ans[i]-t[i+1]<m))//出现相同order的话,要能够让后面的前进一个,所以如果不给后面留空间那就不符合题意
       return puts("No"),0;
     puts("Yes");
     for(int i=1;i<=n;i++)
      printf("%lld ",ans[i]);
     return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    01矩阵扩展
    蒙特卡罗仿真
    某幂相关数学结论
    分式乘法变加减
    ICPC模板排版工具
    windows下mysql使用实录
    随机题目小结
    工作用linux命令汇总
    小数化分数的O(log2n)解法
    博弈总结
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10267929.html
Copyright © 2011-2022 走看看