[jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接:
http://172.16.0.132/senior/#main/show/5343
题目:
题解:
记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献
若$s_i<i$:
对$ans_0,..,ans_{i-s_i}$,贡献分别是$i-s_i,i-s_i-1,...,0$
对$ans_{i-s_i+1},...,ans_{i-1}$,贡献分别是$1,...,s_i-1$
对$ans_i,...,ans_{n-1}$,贡献分别是$n-s_i,...,i+1-s_i$
若$s_i=i$:
对$ans_0$,贡献是$0$
对$ans_1,...,ans_{i-1}$,贡献分别是$1,...,i-1$
对$ans_i,...,ans_{n-1}$,贡献分别是$n-i,...,1$
若$s_i>i$:
对$ans_0,...,ans_{i-1}$,贡献分别是$s_i-i,...,s_i-1$
对$ans_i,...,ans_{i+n-s_i}$,贡献分别是$n-s_i,...,0$
对$ans_{i+n-s_i+1},...,ans_{n-1}$,贡献分别是$1,...,s_i-i-1$
发现都是公差为$1$或$-1$的等差数列,显然线段树可以维护,但是数据范围不允许而且我们也不需要。怎么办呢?我们差分
对ans数组二阶差分即可,注意二阶差分的同时需要在一阶差分消去影响
注意差分的题目手动模拟是很有必要的,每个差分独立考虑
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll; const int N=2e6+;
const ll inf=1e15;
int n;
ll s[N],cha1[][N],cha2[][N],a[N],b[N],p[N];
inline int read(){
char ch=getchar();int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
int main()
{
n=read();
for (int i=;i<=n;i++) s[i]=read();
for (int i=;i<=n;i++)
{
if (s[i]<i)
{
if (<=i-s[i]) cha2[][i-s[i]-]++;
if (i-s[i]+<=i-) {cha1[][i-s[i]+]++;cha1[][i]--;cha1[][i]-=s[i]-;}
if (i<=n-) {cha2[][n-]++;cha2[][i-]--;cha2[][n-]+=i-s[i];cha2[][i-]-=n-s[i];}
}
if (s[i]==i)
{
if (i-s[i]+<=i-) {cha1[][]++;cha1[][i]--;cha1[][i]-=i-;}
if (i<=n-) {cha2[][n-]++;cha2[][i-]--;cha2[][i-]-=n-i;}
}
if (s[i]>i)
{
if (<=i-) {cha1[][]++;cha1[][i]--;cha1[][]+=s[i]-i-;cha1[][i]-=s[i]-;}
if (i<=i+n-s[i]) {cha2[][i+n-s[i]-]++;cha2[][i-]--;cha2[][i-]-=n-s[i];}
if (i+n-s[i]+<=n-) {cha1[][i+n-s[i]+]++;cha1[][n]--;cha1[][n]-=s[i]-i-;}
}
}
for (int i=;i<n;i++) p[i]=p[i-]+cha1[][i];
for (int i=;i<n;i++) cha1[][i]+=p[i];
for (int i=n-;i>=;i--) p[i]=p[i+]+cha2[][i];
for (int i=n-;i>=;i--) cha2[][i]+=p[i];
for (int i=;i<n;i++) a[i]=a[i-]+cha1[][i];
for (int i=n-;i>=;i--) b[i]=b[i+]+cha2[][i];
ll mi=inf;
for (int i=;i<n;i++) mi=min(mi,a[i]+b[i]);
printf("%lld\n",mi);
return ;
}
[jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)的更多相关文章
- [jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)
题目链接: https://jzoj.net/senior/#main/show/6087 题目: 题解: 只需要统计$\prod_{i=l}^r (1-\frac{a_i}{x})$ =$exp(\ ...
- [jzoj 5926] [NOIP2018模拟10.25] naive 的图 解题报告(kruskal重构树+二维数点)
题目链接: https://jzoj.net/senior/#main/show/5926 题目: 题解: 显然最小的最大路径在最小生成树上(最小生成树=最小瓶颈生成树) 于是我们建出kruskal重 ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- [jzoj 5178] [NOIP2017提高组模拟6.28] So many prefix? 解题报告(KMP+DP)
题目链接: https://jzoj.net/senior/#main/show/5178 题目: 题解: 我们定义$f[pos]$表示以位置pos为后缀的字符串对答案的贡献,答案就是$\sum_{i ...
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...
随机推荐
- oracle init.ora常用配置详解
参考网上整理了重要的配置文件 db_name = "51cto" 一个数据库标识符,应与CREATE DATABASE 语句中指定的名称相对应. instance_name = ...
- 2017-3-5 leetcode 442 531 533
今天莫名其妙睡到了中午,很难受... leetcode442 https://leetcode.com/problems/find-all-duplicates-in-an-array/?tab=De ...
- Java-MyBatis-3.0:MyBatis 3 简介
ylbtech-Java-MyBatis-3.0:MyBatis 3 简介 1.返回顶部 1. 简介 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程 ...
- CentOS7开启网络配置
虚拟机在安装时可以开启网络 如果没有开启的话 可以通过以下操作 ip addr 查看是否开启网络 没有开启的话 cd /etc/sysconfig/network-scripts/ 然后 执行 ls ...
- sql导出到excel
1.先查询数据ID,别名 导出到excel 2.增加标准名称,标识错误数据,导入sqlServer select distinct [StandardName] from [GMSOA].[dbo] ...
- 查看网站域名IP地址
运行:CMD 输入: Nslookup 网站地址 示例: Nslookup httpwww.baidu.com 我们是筑梦团队,我们的座右铭是:当提起逐梦的脚步,也请举起筑梦的双手
- 杭电 1114 Piggy-Bank【完全背包】
解题思路,首先很容易想到方程f[v]=min(f[v],f[v-w[i]+p[i]),因为是要求当包装满的时候(因为题目中给出的是包的质量是一定的),包里面装的钱最少,所以将f[]初始化成一个很大的数 ...
- CDR 2017压感笔和压感设备该怎么设置使用?
您可以通过CorelDRAW 2017 中的以下工具来运用压感笔.笔或其他设备的压力:艺术笔(表达模式).橡皮擦.涂抹.转动.吸引.排斥.粗糙和弄脏.此外,您还可以通过艺术笔(表达模式)工具.橡皮擦. ...
- js单体内置对象
js单体内置对象:js的内置对象,是ECMAScritp提供的.不依赖于宿主环境的对象,我的理解就是在我们开发之前js里面就已经存在的对象.单体内置对象就是是不需要通过new来实例化的,例如我们的st ...
- dataTable 动态列 二次加载
需要把 列头和表格内容全部清空 if ($('#datatable').hasClass('dataTable')) { var dttable = $('#datatable').dataTable ...