题目链接

​ 比赛时只想到了 \(\mathcal O(n^3)\) 的暴力做法,官方题解是 \(\mathcal O(n^2)\) ,并且是可以优化为 \(\mathcal O(n)\) 的(贪心+差分)。

​ 贪心是比较明显的,我们需要从左到右依次考虑每张床的贡献,因为第 \(i\) 张床只能由 \([1,i-1]\) 的床跳过来,Pekora从第一张床开始跳一定是最优的。我们从左到右分析,用 \(b_i\) 记录在 \(i\) 床在之前被跳过的次数,如果 \(b_i>S_i-1\) ,说明 \(S_i\) 在之前就已经降为 \(1\) 了,多跳的部分会转移到 \(b_{i+1}\) 上;否则还需要在 \(i\) 床上跳 \(S_i-b_i-1\) 次。然后对于每张床我们只需要考虑它能直接跳到的地方:因为它要从 \(S_i\) 减到 \(1\) ,所以它会把 \([i+2,min(S_i+i,n)]\) 区间上的所有床都跳过一次,即这个区间上的 \(b\) 都增一,这里如果用差分的话就是 \(\mathcal O(1)\) 的区间修改复杂度了,当然用暴力扫一遍也是可以过这道题的。这里给出使用差分的代码,\(b\) 在代码中为差分数组

\(\mathrm{Code}:\)

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 6;
typedef long long ll;
int n,s[N],b[N];//注意b[i]为差分数组 int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d",&n);
ll ans = 0;
for(int i = 1;i <= n;i++) scanf("%d", s + i), b[i] = 0;b[n + 1]=0;
int las = 0;
for(int i = 1;i <= n;i++){
int now = b[i] + las; //now表示是i床在[1,i-1]中被跳了几次,即上面分析中的b[i]
las = now;
if(now > s[i] - 1){
b[i+1] += now - s[i] + 1;
b[i+2] -= now - s[i] + 1;
now = s[i] - 1;
}
ans += s[i] - now - 1;
if(min(s[i] + i, n) >= i + 2){
b[i+2] ++; //相当于区间[i+2,min(s[i]+i,n)]增一
b[min(s[i] + i, n) + 1]--;
}
}
cout<<ans<<endl;
}
return 0;
}

CF1491C Pekora and Trampoline 题解的更多相关文章

  1. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. poj 1696 极角排序(解题报告)

    #include<iostream> #include<cmath> #include<algorithm> using namespace std; double ...

  2. java——类、对象、private、this关键字

    一.定义  二.类的使用 实例:定义的类要在一个class文件内,实例化类的对象要在另一个文件内 类文件: 实例文件: 对象内存图: 先主函数入栈,之后新开一个对象存入堆内存中,之后调用的call方法 ...

  3. Codeforces Global Round 11 C. The Hard Work of Paparazzi (DP)

    题意:有\(r\)X\(r\)的网格图,有\(n\)位名人,会在\(t_i\)时出现在\((x_i,y_i)\),如果过了\(t_i\)名人就会消失,从某一点走到另外一点需要花费的时间是它们之间的曼哈 ...

  4. C++11 Java基本数据类型以及转换

    写在前面: 母语是Java,后来学了C++11,这两个语言的基本数据类型隐式转换不太一样,有点晕,整理一下 整理自网络和书籍,标明出处 C++ 基本数据类型 --http://www.cnblogs. ...

  5. Eureka详解系列(五)--Eureka Server部分的源码和配置

    简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...

  6. 解决M1 MacBook无法使用pip安装Numpy

    问题描述 Python官方已发布支持M1 Apple Silicon的版本,但是在使用pip包管理工具安装一些依赖时发生了错误,这里面就包括在科学计算领域常用的numpy.pandas等.目前可以通过 ...

  7. SpringBoot整合Swagger初探

    当下的Web项目大都采用前后端分离+分布式微服务的架构.前后端分离式的开发中,前端开发人员要与后端开发人员协商通信接口,约定接口规范.因此对于开发人员来说能够维持一份及时更新且完整全面的API文档会大 ...

  8. 二进制安装kubernetes(七) 部署知识点总结

    1.k8s各个组件之间通信,在高版本中,基本都是使用TSL通信,所以申请证书,是必不可少的,而且建议使用二进制安装,或者在接手一套K8S集群的时候,第一件事情是检查证书有效期,证书过期或者TSL通信问 ...

  9. codeforces 6D

    D. Lizards and Basements 2 time limit per test 2 seconds memory limit per test 64 megabytes input st ...

  10. 进程控制——fork-and-exec、system、wait

    forc-and-exec流程 父进程与子进程之间的关系十分复杂,最大的复杂点在于进程间相互调用.Linux下这一流程称为fork-and-exec.父进程通过fork的方式产生一个一模一样的子进程, ...