题意

一个长度为n的序列h[i]表示第i个位置的数不能超过h[i]。每个数和相邻的数的差只能为-10,0或+10。

现在可以允许一个位置忽略限制,求数列中所有数的和最大为多少。

思路

算出没有忽略限制时所有位置的最大值a[i]。

枚举忽略限制的点。

假如一个点忽略限制能够增大答案,那么a[i]==h[i],否则即使h[i]变为无穷大他也受左右两边的限制而无法超过a[i]。

然后考虑忽略限制之后a[i]的改变。

发现所有a[i]只会增加而不可能减小,所以h[i]变化的影响范围是从i出发向左右两边延伸,到a[j]==h[j]的第一个j时停止。

假设所有h[i]==a[i]的点把序列分割成几个小段,那每个小段只会被访问O(1)次,所以暴力修改O(n)。

赛中胡结论失败。好题。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10, inf = 1e9 + 10010;
int n, h[N], r[N], l[N];
LL sum, ans;void solve(int pos)
{int pre = 0, suc = n + 1;for (int i = pos - 1; i >= 1; -- i)if (h[i] == r[i]){pre = i;break;}for (int i = pos + 1; i <= n; ++ i)if (h[i] == r[i]){suc = i;break;}int tmp = h[pos]; h[pos] = inf;LL add = 0;l[pre] = r[pre]; l[suc] = r[suc];for (int i = pre + 1; i < suc; ++ i)l[i] = min(h[i], l[i-1] + 10);for (int i = suc - 1; i > pre; -- i){l[i] = min(l[i], l[i+1] + 10);add += l[i] - r[i];}h[pos] = tmp;if (add + sum > ans) ans = add + sum;
}int main()
{scanf("%d", &n);for (int i = 1; i <= n; ++ i)scanf("%d", &h[i]);r[0] = r[n + 1] = inf;for (int i = 1; i <= n; ++ i)r[i] = min(h[i], r[i-1] + 10);for (int i = n; i >= 1; -- i){r[i] = min(r[i], r[i+1] + 10);sum += r[i];}ans = sum;for (int i = 1; i <= n; ++ i)if (h[i] == r[i])solve(i);printf("%lld\n", ans);return 0;
}

【Comet OJ - 2019国庆欢乐赛 F】 高速公路相关推荐

  1. Comet OJ - 2019国庆欢乐赛(赛后整理)

    Comet OJ - 2019国庆欢乐赛(赛后整理) 比赛链接:传送门 PS: 做题失误: A题wa了好久不知道为什么,后来才知道乘法爆long long了 B题思路错了,应该在想清楚些. 比赛过程中 ...

  2. Comet OJ - 2019国庆欢乐赛 G 后缀数组

    题目链接: https://www.cometoj.com/contest/68/problem/G?problem_id=3940 出题人给的题解: 我们知道,一个子串是字符串的后缀的前缀.  这就 ...

  3. Comet OJ - 2019国庆欢乐赛 D1 入学考试 (简单版)

    https://www.cometoj.com/contest/68/problem/D1?problem_id=3936 入学考试 (简单版) 枚举 已经做完的卷子数量 然后 剩下的时间 我们二分它 ...

  4. Comet OJ - 2019国庆欢乐赛 G-字符串(后缀数组)

    题目 思路来源 官方题解 题解 用大于z的字母将串分隔,值得一提,'z'+1=='{' 将询问串t1{t2{t3{tq{s接在一起 注意到最小k,即为s串内最前位置k 倒序遍历sa[]数组,更新在原串 ...

  5. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  6. Comet OJ - 2019 六一欢乐赛

    传送门 #A: 思路:等差数列求和,看成俩次1+2+-+ n,多加的n减去,所以 ans = n*(n+1) - n. AC代码: 1 #include<iostream> 2 #incl ...

  7. Comet OJ - 2019六一欢乐赛

    这个题目我先写了些简单的 之后继续填坑: 比赛链接 题目链接 题目描述 小智是一名刚满十岁的男孩,住在真新镇中,他目标是成为一名优秀的宝可梦训练师,他明天就要从大木博士那里获得自己的第一只宝可梦了.博 ...

  8. Comet OJ - 2019六一欢乐赛C.收服宝可梦吧!

    题目描述 继上一话皮卡丘把那几个坏人炸飞之后,小智确认皮卡丘已经完全恢复了.于是带着皮卡丘继续上路,前往尼比市去,小霞为了她的脚踏车的事情也一直跟着小智. 在通往尼比市的路上,要经过一个漆黑的常磐森林 ...

  9. Comet OJ - 2019六一欢乐赛题解

    第001话 宝可梦,就决定是你了! 等差数列求和公式 #include <cstdio> #include <iostream> #include <vector> ...

最新文章

  1. iptables_默认规则
  2. leetcode-剑指 Offer 44. 数字序列中某一位的数字
  3. java sundry tips
  4. LintCode 1862. 给树浇水的时间(图的遍历)
  5. SQLite数据库【转有改】
  6. 未来数据中心核心技术:RDMA在京东的应用
  7. CentOS7与Windows AD集成之二Windows域账户登录CentOS7
  8. 张会生 现代通信系统原理_通信原理实验——软件仿真实验三 模拟通信系统—SSB...
  9. 微型计算机机房湿度不宜过大对,2013年计算机等考三级PC技术练习题及答案(1)...
  10. jQuery选择器经典案例
  11. 报错A Database Error Occurred,linux系统被cc***
  12. 无法连接到目标服务器,如何解决IDM连接错误?
  13. 软件使用疑难杂症解决记录篇——科瑞工程量计算簿
  14. Log:日志选型调研『一』
  15. python3爬取网易云歌单数据清洗_网易云音乐爬虫 数据可视化分析
  16. 谢尔顿在玩科南时代,哈哈
  17. 井盖识别yolov5
  18. 神经网络与深度学习(入门篇)
  19. hive-jdbc 的大坑
  20. fest + selenium进行In-browser Applet自动化测试

热门文章

  1. OTHER:环比与同比
  2. Windows操作系统万能Ghost全攻略
  3. 使用putty下载文件
  4. ddt数据驱动 python接口 xls_013 python接口 数据驱动ddt
  5. unity打包xcode,在iOS11设备调试报错
  6. TigerGraph率先推出原生图数据库即服务,3200万美元B轮融资在这里!
  7. 曲线运动与万有引力公式_高中物理必修一知识点总结:曲线运动万有引力
  8. 软件测试中自上而下与自下而上的区别
  9. “胡”说IC——菜鸟工程师完美进阶
  10. 网易云--手机QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没?