【jzoj5343】【NOIP2017模拟9.3A组】【健美猫】
2017-09-03 16:30
555 查看
description
solution
可以把点投射到以i坐标为x坐标,以a[i]为y坐标的二维平面,考虑维护两条斜率为1直线,点到直线竖直距离和即为答案,分别为维护多少个点在直线上,用两个桶维护即可,坐标分别为到y=x竖直距离和到(n,0)曼哈顿距离。
code
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define LF double #define LL long long #define ULL unsigned LL #define fo(i,j,k) for(LL i=j;i<=k;i++) #define fd(i,j,k) for(LL i=j;i>=k;i--) #define fr(i,j) for(LL i=begin[j];i;i=next[i]) using namespace std; LL const mn=4*1e6+2,inf=1e9+7; LL n,a[mn],cnt[mn],cn2[mn]; LL read(){ char ch=getchar(); while((ch!='-')&&((ch<'0')||(ch>'9')))ch=getchar(); LL op,v=0; if(ch=='-')op=-1; else op=1,v=ch-'0'; ch=getchar(); while((ch>='0')&&(ch<='9'))v=v*10+ch-'0',ch=getchar(); return op*v; } int main(){ freopen("d.in","r",stdin); freopen("d.out","w",stdout); n=read(); fo(i,1,n)a[i]=read(); LL up=0,tmp=0; fo(i,1,n){ tmp+=abs(a[i]-i); if(a[i]>i)cnt[a[i]-i]++; up+=a[i]>i; } LL ans=tmp,up2=0; fd(i,n,2){ tmp+=i-1-up*2; up-=cnt[n-i+1]; tmp+=a[i]+1-abs(a[i]-n-1); cn2[a[i]+n-i]++; up2++; tmp+=n-i+1-up2*2; up2-=cn2[n-i+1]; ans=min(ans,tmp); } printf("%lld",ans); return 0; }
相关文章推荐
- JZOJ5344. 【NOIP2017模拟9.3A组】摘果子
- 【JZOJ5343】【NOIP模拟】健美猫(模拟)
- [JZOJ5344]【NOIP2017模拟9.3A组】摘果子
- JZOJ5344. 【NOIP2017模拟9.3A组】摘果子 树上依赖背包
- JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子
- 【jzoj5344】【NOIP2017模拟9.3A组】【摘果子】【树型依赖背包】
- JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子
- 【JZOJ5341】【NOIP2017模拟9.2A组】密州盛宴
- JZOJ5360. 【NOIP2017提高A组模拟9.12】Shorten Diameter
- JZOJ 5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
- JZOJ5379. 【NOIP2017提高A组模拟9.21】Victor爱数字 数位DP
- JZOJ 5385. 【NOIP2017提高A组模拟9.23】Carry
- JZOJ 5185. 【NOIP2017提高组模拟6.30】tty's sequence
- [JZOJ5396]【NOIP2017提高A组模拟10.6】Blocks
- JZOJ5400. 【NOIP2017提高A组模拟10.7】Repulsed
- JZOJ4919. 【NOIP2017提高组模拟12.10】神炎皇
- 【jzoj5329】【NOIP2017提高A组模拟8.22】【时间机器】【数据结构】【扫描线】
- JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
- JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven
- JZOJ5354. 【NOIP2017提高A组模拟9.9】导弹拦截