一、题目

点此看题

二、解法

玄学警告⚠,由于线上的数量是定值,转而求线的数量已推知线下数量。

设t[i]t[i]t[i]为iii时刻线的数量,d[i]d[i]d[i]为线下的数量,易知 t[i]=m[i]+d[i]+1t[i]=m[i]+d[i]+1t[i]=m[i]+d[i]+1,有这样一些限制:

  • t[i]≥t[i−1]t[i]\geq t[i-1]t[i]≥t[i−1],即线的数量单调递增
  • t[i]≥m[i]t[i]\geq m[i]t[i]≥m[i],这个看定义吧
  • t[i]−1≤t[i−1]t[i]-1\leq t[i-1]t[i]−1≤t[i−1],即每天只能画一条线

前两个限制取最大值,第三个限制从后往前扫,把t[i]t[i]t[i]和t[i+1]−1t[i+1]-1t[i+1]−1取maxmaxmax,最后扫一遍就可以算出答案,时间复杂度O(n)O(n)O(n)。

那么这个算法的正确性如何推知呢?我的理解是我们尽可能贴着1,21,21,2限制的边界也就是尽量把线画重,因为线的数量越少越好,后面我们要扫回来的原因是我们贴着边界画不一定画的出来合法解,我们需要把以前画重的线拆开,以满足后面的需要。

#include <cstdio>
#include <iostream>
#define int long long
using namespace std;
const int M = 100005;
int read()
{int x=0,flag=1;char c;while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*flag;
}
int n,ans,m[M],t[M];
signed main()
{n=read();for(int i=1;i<=n;i++)t[i]=max(t[i-1],(m[i]=read())+1);for(int i=n-1;i>=1;i--)if(t[i+1]-1>t[i])t[i]=t[i+1]-1;for(int i=1;i<=n;i++)ans+=t[i]-m[i]-1;printf("%lld\n",ans);
}

CF924C Riverside Curio相关推荐

  1. D. Riverside Curio

    D. Riverside Curio ​ https://codeforces.com/problemset/problem/957/D Arkady decides to observe a riv ...

  2. Codeforces 924C Riverside Curio(瞎搞)

    题目链接:Riverside Curio 题意 ArkadyArkadyArkady 打算观察一条河的水位 nnn 天,每天他都在水平面处做一个标记,水的涨落不会将之前的标记冲走,每天他都会记录下严格 ...

  3. CF957D Riverside Curio

    dp+预处理 dp[i]表示第i天时的水位线有多少条, 然后你会发现这个dp是有后效性的,当第i天的m[i]>dp[i-1]时就要修改之前的dp值 因此我们预处理出每一天的至少要多少条水位线,记 ...

  4. [Codeforces947D]Riverside Curio(思维)

    Description 题目链接 Solution 设S[i]表示到第i天总共S[i]几个标记, 那么满足S[i]=m[i]+d[i]+1 m[i]表示水位上的标记数,d[i]表示水位下的标记数 那么 ...

  5. CF 472D Riverside Curio

    一直以为是dp或者搜索之类的,搞了半天发现并不是qwq-.这道题其实应该从一个比较整体的角度来考虑, 首先,我们要最小化每天的d,因为每天的划线总数是ti=di+mi+1,因此实际上我们就是要最小化每 ...

  6. codeforces 957D Riverside Curio

    题目链接:http://codeforces.com/contest/957/problem/D 题意:有一个水池,每天的水位会上升或者下降.每天需要在水位处划一道白线来记录当天的水位,如果水位处有白 ...

  7. 【Codeforces 924C】Riverside Curio

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 设第i天总共的线数为t[i] 水平线上线数为m[i]是固定的 水平线下的线数设为d[i] 则d[i]+m[i]+1=t[i] 也就是说问题可以 ...

  8. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  9. Curio for Mac(头脑风暴思维导图)

    Curio for Mac是一款Mac上非常好用的Mac上的头脑风暴/思维导图软件,Curio Mac具有头脑风暴跟思维导图功能,同时Curio还具有强大的项目管理功能.它可以直观地收集,并记得您的想 ...

最新文章

  1. 对ie6、ie7、ff兼容性的详细css hack介绍
  2. 到底是把甲方当爸爸还是当甲方爸爸
  3. [组件] TopN 排行榜
  4. IOS基础基于pod上手体验FMDB框架
  5. docker安装mysql数据库映射_Docker安装mysql数据库
  6. js中函数的三种定义方式、函数声明、函数同名重复、函数删除、
  7. 白板推导系列Pytorch-隐马尔可夫模型-学习问题
  8. IT基础架构规划方案一(网络系统规划)
  9. 上海海洋大学计算机二级成绩,上海海洋大学是几本 2018分数线是多少分
  10. wifi 框架流程分析
  11. 25行代码爬取英雄联盟手游英雄皮肤图片
  12. java之家_java之家
  13. 管理学(第二课)笔记
  14. linux下挂载光驱方法,Linux下光驱挂载技巧
  15. 计算机二级15年大纲,2015年下半年全国计算机二级考试MSoffice高级应用大纲
  16. js逆向爬虫某openLaw网站
  17. 5分钟学会cleos注册EOS主网账户、投票和发币
  18. 小程序入门教程之微信-02-页面样式
  19. 享学课堂java架构师课程,你还看不明白?
  20. 【计算机科学】【2016.05】基于递归神经网络的股市预测研究

热门文章

  1. springboot集成redis报错找不到bean
  2. pgsql之create user与create role的区别
  3. 文本特征提取——one-hot
  4. 金融分析与风险管理——风险价值(VaR)
  5. Unity零基础到入门 ☀️| 一起走进游戏引擎界大佬——Unity 的陈情往事,Unity故事背景介绍
  6. [渝粤教育] 西安交通大学 工程热力学 参考 资料
  7. 富文本编辑器粘贴复制Word
  8. Jekins构建触发器Build Triggers:定时构建配置
  9. /storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别
  10. 如何使用stc12c5a60s2控制蜂鸣器