题目大意:

  当一栋楼比旁边两栋楼都高的时候,这栋楼为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的更多相关文章

  1. 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 ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. Java自增自减运算

    自增自减运算 //++(自增) --(自减) 一元允运算 int a =3; //a = a+1-----4 int b=a++; //执行完这行代码后,先给b赋值,再自增 System.out.pr ...

  2. 第六十三篇:Vue的条件渲染与列表渲染

    好家伙, 1.条件渲染v-if 1.1.v-if基本使用 <body> <div id="app"> <p v-if="flag" ...

  3. 【设计模式】Java设计模式 - 动态代理

    [设计模式]Java设计模式 - 动态代理 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 最近工作比较忙,没啥时间学习 目录 [设计模 ...

  4. 函数索引引用的函数必须是immutable类型

    用户在使用中,可能会用到基于函数的索引,但是函数是非 immutable 类型的,导致函数索引无法创建.如: test=# create index ind_t1 on t1(to_char(crea ...

  5. maven-scope属性

    Maven 中的 scope 属性解释 <dependency> <groupId>org.glassfish.web</groupId> <artifact ...

  6. CSS之垂直水平居中的背后

    最开始,我想说,这个体系有点大,我写的并不好.就当作是一个思路吧,虽然这个思路有点乱.几乎每一个实现方案的背后都是该属性及其组合的原理,每一个都要剖析其规范细节的话,这篇文章绝不会是这样的篇幅,所以每 ...

  7. Java 自定义Excel数据排序

    通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值.单元格颜色.字体颜色或图标等.在需要自定义排序情况下,我们也可以自行根据排序需要编辑数据排列顺序.本文,将通过 ...

  8. Exchange备份和日志清除

    最近新部署Exchange 2019,虽然变化不大,但是也遇到了一些小问题.随着深入研究,就能发现一些以前被忽视的点.Exchange完成备份后,数据库日志并没有被清除,依然存在.https://ww ...

  9. Ubuntu22.04 安装配置流水账

    前两天为了测一个CH340的bug, 装了三遍20.04. bug解决完, 心想反正也要重新装各种软件, 不如直接装22.04吧. 把涉及的安装记录一下方便将来参考. 制作启动U盘 在Ubuntu网站 ...

  10. 《Java基础——方法的调用》

    Java基础--方法的调用     总结: 1. 在同一个类中-- 对于静态方法,其它的静态和非静态方法都可以直接通过"方法名"或者"类名.方法名"调用它. 对 ...