Codeforces Round #809 (Div. 2)C.Qpwoeirut And The City
题目大意:
当一栋楼比旁边两栋楼都高的时候,这栋楼为cool,对除了1和n以外的所有楼可以增加任意层,问在满足使最多的楼cool的前提下的花费最小。
当n为奇数的情况下:
cool的楼实际上是固定的,只要将他们需要的花费加起来就好。
当n为偶数的情况下:
cool的楼并不固定,但是他的形式是固定的,要么所有cool楼之间隔一个楼,要么cool楼之间除了一个间隔2,其他全部间隔1;
所以我们可以通过枚举间隔2来枚举所有情况,取消费的最小值。
举个例子:0 1 0 1 0 1 0 0 1 0 1 0 /*间隔为2的只有一组*/
1 void solve() {
2
3 cin >> n;
4 for (int i = 1; i <= n; ++i) {
5 cin >> a[i];
6 b[i] = c[i] = 0;
7 }
8 b[0] = c[0] = b[n + 1] = c[n + 1] = 0;
9 for (int i = 2; i <= n-1; i += 2) {
10 int maxv = max(a[i - 1], a[i + 1]);
11 b[i] += max(1ll*0, 1ll * maxv - a[i] + 1);
12 }
13 for (int i = n - 1; i >= 2; i -= 2) {
14 int maxv = max(a[i - 1], a[i + 1]);
15 c[i] += max(1ll*0, 1ll * maxv - a[i] + 1);
16 }
17 for (int i = 1; i <= n; ++i) b[i] += b[i - 1];/*前缀和*/
18 for (int i = n; i >= 1; --i) c[i] += c[i + 1];/*后缀和*/
19
20 if (n & 1) {
21 cout << b[n - 1] << endl;
22 return;
23 } else {
24 int minn =1e18;
25 for (int i = 1; i <= n; ++i) {
26 minn = min(minn, b[i] + c[i + 1]);/*枚举间隔*/
27 }
28 cout << minn << endl;
29 }
30 }
比较新的就是枚举间隔的方法,用前后缀枚举
其次比较需要注意的是数据范围,超过平常的1e9了,所以注意读题
Codeforces Round #809 (Div. 2)C.Qpwoeirut And The City的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
随机推荐
- 【manim】学习路径1-安装篇-windows、macOS
下一章:https://www.cnblogs.com/remyuu/p/16462369.html 本系列以大量实战讲解manim数学动画引擎. 文档编辑器推荐:Sublime Text 这里是一些 ...
- 【JDBC】学习路径6-SQL插入、修改、删除数据
第一章:插入使用.executeUpdate(); 返回的是受到影响的数据条数. public static boolean insert(String username,String passwor ...
- 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程
大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...
- 在cmd中使用doskey来实现alias别名功能
作为一枚网络工程师,经常就是面对一堆黑框框,也是就是终端.不同操作系统.不同厂家的目录,功能相同但是键入的命令又大不相同,这些差异化容易让脑子混乱.比如华为.思科.H3C.锐捷的设备, ...
- Android Kotlin Annotation Processer
Annotation Processer 注解处理器(Annotation Processer)是javac内置的注解处理工具,可以在编译时处理注解,让我们自己做相应的处理.比如生成重复度很高的代码, ...
- UE 实现镜头平移,旋转和缩放
0x00 引 在数字孪生三维场景中,通过键盘和鼠标来控制镜头的移动,缩放是很常见的行为,也是很必要的行为,用户正是通过这些操作,达到对整个三维场景的观看和控制. 0x01 键盘控制镜头前后左右移动 通 ...
- C++基础入门:C++初始
1. C++环境:Clion搭建 下载链接:clion官方网址 1.1 点击下载 1.2 下载对应版本 1.3 安装步骤: 1.3.1 下载完毕后,打开exe文件,进入安装界面,点击[Next > ...
- KingbaseES R6 集群创建流复制只读副本库案例
一.环境概述 [kingbase@node2 bin]$ ./ksql -U system test ksql (V8.0) Type "help" for help. test= ...
- Linux_tail总结
tail 命令用法 功能从尾部显示文件若干行 语法: tail [ +/- num ][参数] 文件名 使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把 ...
- InnoDB_锁总结
1. 查询会对资源添加共享锁 加了共享锁的资源不可以被修改:但可以被查询(也是会在资源上再加共享锁) 2. 数据修改会对资源添加排他锁 加了排他锁的资源只能被持有这个排他锁的事务读取和修改,其他事务读 ...