【JZOJ5343】【NOIP模拟】健美猫(模拟)
来源:互联网 发布:js数组去重系统方法 编辑:程序博客网 时间:2024/06/02 16:00
Description
Solution
由于比较的蠢,比赛的时候没有想出来。
一开始的方向就搞错了,搞了个自以为是对的贪心,然后就一直往这个地方想,用的时间太多就弃疗了。
其实思想还是比较的简单的,首先把原序列的答案求一次,我们可以逆向考虑一下,不用把序列移动,把下标移动。
比如把每个下标向左移动一格,那么原本a[i]>i的值会减1,a[i]<=i的值会+1,还有下标从n到1的数会改变一下。
然后这个可以用数据结构来做,也可以直接模拟。
Code
#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=4e6+7;typedef long long ll;ll i,j,k,l,t,n,m,ans,an;ll a[maxn],bz[maxn],bb,cc;int main(){// freopen("fan.in","r",stdin); scanf("%lld",&n); fo(i,1,n){ scanf("%lld",&a[i]); if(a[i]>i)ans+=a[i]-i,bz[min(n-i+a[i],a[i]-i)]++,bb++; else ans+=i-a[i],cc++; } an=ans; fo(i,1,n){ ans+=cc-bb; ans-=n+1-a[n-i+1]; ans+=a[n-i+1]-1; cc--; if(a[n-i+1]>1)bb++,bz[i+a[n-i+1]-1]++; else cc++; bb-=bz[i],cc+=bz[i]; an=min(an,ans); } printf("%lld\n",an);}
阅读全文
1 0
- 【JZOJ5343】【NOIP模拟】健美猫(模拟)
- 【jzoj5343】【NOIP2017模拟9.3A组】【健美猫】
- Noip模拟
- 【NOIP 模拟题】[T1]return(模拟)
- (noip 模拟 化简)<惊天大模拟>
- 【NOIP模拟】20151004模拟
- 【NOIP模拟】 20151005模拟
- 【NOIP模拟】 20151006模拟
- 【NOIP模拟】 20151007模拟
- 【NOIP模拟】20151014模拟
- 【NOIP模拟】20151015模拟
- NOIP模拟 门票(dfs)
- NOIP模拟:Subset(分块)
- #NOIP模拟赛#多边形Polygon(枚举 + 模拟)
- NOIP模拟9.16(TYVJ NOIP2017模拟赛D1)
- NOIP模拟9.17(TYVJ NOIP2017模拟赛D2)
- NOIP模拟9.23(TYVJ NOIP2017模拟赛D1)
- [noip模拟赛]祖先(dp)
- 基于lua服务器
- tf.shape(a)和a.get_shape()
- Js作用域与作用域链详解
- MyBatis框架中Mapper类中方法的返回类型问题解决方案
- 在ubuntu下python编码问题
- 【JZOJ5343】【NOIP模拟】健美猫(模拟)
- 分享下学习Kotlin的历程-数据类型(2)
- HDU 2015 偶数求和
- java 实现 计算tfidf 使用ik分词
- Java代理模式
- CCF-CSP认证题201703-3 Markdown
- Cordova 开发之安卓插件开发(二)
- Java多线程--重入锁的实现原理
- Solrj的增删改查,高亮,及分页