【DBSDFZOJ 4448】a(乱搞)
来源:互联网 发布:jessica整容分析知乎 编辑:程序博客网 时间:2024/06/13 03:46
Description
这是一道原题。
给定一长度为 n 的序列 s,定义其健美值为:
因为猫喜欢健美,所以猫希望减小 s 的健美值,以衬托猫的健美。为了达到猫的目的,猫希望你对序列进行旋转操作,一次旋转操作可以使序列中的所有元素前移一位,并使 s1移动到 sn。
你可以进行任意次旋转操作,猫希望旋转后的健美值最小,请找出这个最小值。
Input
n
s1 s2 · · · sn
Output
一个数,代表最小的健美值。
Sample Input 1
3
2 3 1
Sample Output 1
0
Sample Input 2
6
4 2 2 4 2 5
Sample Output 2
6
Data Constraint
对于 30% 的数据 n≤10^3。
对于 70% 的数据 n≤10^5。
对于 100% 的数据 n≤2*10^6 , ∀i 1≤si≤n。
解题思路
当一个数si减去i时,我用数组z模拟了一个数轴,记录每个点上的数有多少个,再记录大于零的数和小于零的数分别有多少个。对于每次向后枚举第一个i的位置,朴素的做法是把每个数都加一;乱搞做法就是把数轴原点减一,再通过大于零和小于零的个数更新当前的答案。
代码
#include<bits/stdc++.h>using namespace std;int n,O,fu,zheng;long long now,ans;int a[2000005];int z[6000005];int main(){ scanf("%d",&n);O=2*n; for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i){ ++z[O+a[i]-i]; if(a[i]-i<0) ++fu; if(a[i]-i>0) ++zheng; now+=abs(a[i]-i); } ans=now; for(int i=1;i<=n-1;++i){ --z[O+a[i]-1]; if(a[i]-1>0) --zheng; now-=abs(a[i]-1); now=now-fu+zheng+z[O]; zheng+=z[O];fu-=z[O-1]; --O; ++z[O+a[i]-n]; if(a[i]-n<0) ++fu; now+=abs(a[i]-n); ans=min(ans,now); } printf("%lld",ans); return 0;}
阅读全文
0 0
- 【DBSDFZOJ 4448】a(乱搞)
- 【DBSDFZOJ 4415】黄金拼图(乱搞)
- 【乱搞】【DBSDFZOJ 4415】黄金拼图
- DBSDFZOJ 模拟考试 命运 最小生成树+乱搞
- 【DBSDFZOJ 4409】a(离散化+树状数组)
- 【DBSDFZOJ 4460】666(DP)
- 【DBSDFZOJ 4430】陶陶摘苹果(DP)
- A - Voting for Photos -- (利用映射乱搞)
- 【NOIP2017提高A组冲刺11.2】失格(乱搞)
- 【DBSDFZOJ 4370】小宁的机器人(模拟)
- 【转】【DBSDFZOJ 1163】分治 第K小元素(分治)
- 【DBSDFZOJ 4445】棋盘(组合数学-错排公式+高精度)
- HDU Median (乱搞)
- [BZOJ2456]mode(乱搞)
- test 三角形 (乱搞)
- #COCI#word(乱搞)
- HDU6058(乱搞)
- 乱搞
- construct2新手教程
- webpack自动编译
- 基本数据类型和包装类
- GalaxyOJ-871 (单调队列)
- 排序算法4_快速排序
- 【DBSDFZOJ 4448】a(乱搞)
- 环境变量
- 7.oracle函数
- 16通道24位分辨率x8 PCIE 3U PXIE采集卡
- Codeforces 270E Flawed Flow【思维+类拓扑排序】
- 【第二周周练 H 】
- 【NOIP2013初赛】整除
- Combination Sum II:允许重复的数组中选取若干元素使和为某一给定值
- 初识GP