CF1491C Pekora and Trampoline 题解
比赛时只想到了 \(\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 题解的更多相关文章
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
随机推荐
- Hbase Java API包括协处理器统计行数
package com.zy; import java.io.IOException; import org.apache.commons.lang.time.StopWatch; import or ...
- Codeforces Round #677 (Div. 3) G. Reducing Delivery Cost(dijkstra算法)
题目链接:https://codeforces.com/contest/1433/problem/G 题解 跑 \(n\) 遍 \(dijkstra\) 得到任意两点间的距离,然后枚举哪一条边权为 \ ...
- linux命令行创建快捷方式
ln -s 源文件 目标目录 https://blog.csdn.net/ljw_jiawei/article/details/91044595
- SSH服务连接
SSH基本概述 SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输.确保了数据传输安全. SSH服务 ssh: secure shell, protocol, 22/ ...
- L3-015. 球队“食物链”【DFS + 剪枝】
L3-015. 球队"食物链" 时间限制 1000 ms 内存限制 262144 kB 代码长度限制 8000 B 判题程序 Standard 作者 李文新(北京大学) 某国的足球 ...
- codeforces 758D
D. Ability To Convert time limit per test 1 second memory limit per test 256 megabytes input standar ...
- UVA-10815 Andy's First Dictionary (非原创)
10815 - Andy's First Dictionary Time limit: 3.000 seconds Problem B: Andy's First DictionaryTime lim ...
- 101道Numpy、Pandas练习题
无论是数据分析还是机器学习,数据的预处理必不可少. 其中最常用.最基础的Python库非numpy和pandas莫属,很多初学者可能看了很多教程,但是很快就把用法忘光了. 光看不练假把式,今天向大家推 ...
- 使用 js 实现一个简易版的 async 库
使用 js 实现一个简易版的 async 库 具有挑战性的前端面试题 series & parallel 串行,并行 refs https://www.infoq.cn/article/0NU ...
- iPadOS 14 memoji 无法使用 bug
iPadOS 14 memoji 无法使用 bug iPadOS 14 bug refs 如何在 iPhone 和 iPad Pro 上使用动话表情 https://support.apple.com ...