正题


题目大意

给出序列s(s∈[1,n])(s\in [1,n])(s∈[1,n]),将序列旋转
旋转操作
si=si+1(i∈[1,n−1])sn=s1\begin{matrix} \\s_i=s_{i+1}(i\in [1,n-1]) \\ s_n=s_1 \end{matrix}si​=si+1​(i∈[1,n−1])sn​=s1​​
然后要求
∑i=1nsi−i\sum _{i=1}^ns_i-ii=1∑n​si​−i
最小


解题思路

根据对答案的贡献,我们排除尾部过去,我们可以大致分为两种情况:
si&lt;=i:fi=fi−1+1s_i&lt;=i:f_i=f_{i-1}+1si​<=i:fi​=fi−1​+1
si&gt;i:fi=fi−1−1s_i&gt;i:f_i=f_{i-1}-1si​>i:fi​=fi−1​−1
然后我们用桶aia_iai​记录在第i次旋转会两种形态互换的个数然后用addaddadd记录目前可以累加的,然后每次根据上面那个aia_iai​来改变addaddadd。
至于最后一个,我们考虑一下s?−ns_?-ns?​−n肯定是在第1种情况,然后要先用这个改变,然后在考虑
abs(s?−n)(s&lt;=n)⇒n−s?abs(s_?-n)\ (s&lt;=n) \Rightarrow n-s_?abs(s?​−n) (s<=n)⇒n−s?​

abs(s?−1)(s&gt;=1)⇒s?−1abs(s_?-1)\ (s&gt;=1) \Rightarrow s_?-1abs(s?​−1) (s>=1)⇒s?​−1
所以改变之后产生代价
(n−s?)+(s?−1)=2∗s?−n−1(n-s_?)+(s_?-1)=2*s_?-n-1(n−s?​)+(s?​−1)=2∗s?​−n−1


code

#include<cstdio>
#include<algorithm>
#define N 2000010
using namespace std;
int n,s[N],a[N];
long long ans,sum,add;
int read(){int x=0,flag=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')flag=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*flag;
}
int check(int x,int y)
{if(x<=y) return y-x;else return n+y-x;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){s[i]=read();a[check(i,s[i])]++;if(s[i]<=i) add++;sum+=abs(s[i]-i);}ans=sum;for(int i=1;i<n;i++){add--;sum+=abs(s[n-i+1]-1)-abs(s[n-i+1]-n);sum+=add*2-n+1;add+=a[i];ans=min(ans,sum);}printf("%lld",ans);
}

nssl1195-健美猫【???】相关推荐

  1. 【NOIP模拟】健美猫

    题面 分析 此题真是一言难尽.下面这么大一串,真的只是在讲一个小模拟...此题也是被几个julao反复讲,各种五花八门的奇淫巧技,什么数学变形,树状数组,差分,单调--好吧,我是那种只会30分暴力的人 ...

  2. ssl提高组周四备考赛【2018.10.18】

    前言 开始做四面八方扣来的题 成绩 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111 2017zyc2017zyc2017 ...

  3. ecs要按两次才有效_猫咪想要增肥有什么办法?吃是最简单有效的了,但要吃对了才行...

    当咱们成天在提醒各位铲屎官该注意家里猫主子的体重了.该控制好身材体重了.该小心肥胖疾病的时候,有些猫咪的确是有增肥这种拉仇恨的需求的,就像是那些永远吃不胖的人想要体验一下肉感的身材一样. 不过关于猫咪 ...

  4. 观察者模式的经典应用(猫叫 烧开水)

    Code 猫叫了 老鼠跑 主人惊醒  1/**//*  2 * 题目:  3 * 猫叫了,所有老鼠开始逃跑,主人被惊醒,请用OO的思想描绘此过程  4 * 1,老鼠跟主人是被动的  5 * 2,要考虑 ...

  5. c语言 狸抓兔子,捕捉猫狸的方法- 抓野猫的最好方法

    抓野猫的最好方法 最好是用食物诱捕.首先我们要用一些猫粮,或者自制食物,多一点时间去用实物喂给猫猫吃.一般野猫比较怕生,你一过去就会跑远,我们可以把食物固定放一个位置先,然后你放下站在距离食物三米左右 ...

  6. 短信猫GSM Modem

    短信猫是用来收发短信的设备,和手机一样 插入SIM卡,通过(USB或串口)数据线/PCI插槽接到电脑上 在电脑上通过相关软件就可以实现短信收发的功能 相关软件也就是收发短信的短信应用软件 可以自己开发 ...

  7. 信息记录拉取失败_天猫入驻为什么失败?猫店侠做详细解读

    天猫入驻为什么失败?这是很多商家都想要知道的一件事情,猫店侠想说其实这也很正常,只要不是一味盲目的入驻,就还有机会. 首先失败商家要看看失败的反馈内容,看看是哪方面不达标,再着重进行补充,但实际上猫店 ...

  8. ***突然断开可能是ADSL猫惹的祸

    在我们使用×××服务器的时候,最讨厌的就是无故的断线了,可能正在和好×××一起副本,或者正在视频热聊中,还或者youtube视频看的正起劲,突然windows一个对话框弹出 - "连接已经断 ...

  9. 分享一个C#使用AT指令控制语音猫的例子

    阅读全文:http://www.cckan.net/forum.php?mod=viewthread&tid=61 先来说说 最近公司让开发一个语音猫充值的软件,就是拨打10086(虚拟)进行 ...

  10. pix怎么抚养另一只猫_在工作和抚养两个孩子的同时,我如何在一年内获得第二学位并获得了5个开发人员认证...

    pix怎么抚养另一只猫 "The standard pace is for chumps. The system is designed so anyone can keep up. If ...

最新文章

  1. 互联网公司的那些搞笑gif
  2. python_day9 进程池
  3. Use Asynchronous Apex
  4. webview300毫秒点击问题
  5. PHP之父评价Facebook的HipHop项目:别当作银弹
  6. nc 探测端口_防盗报警探测器的几种防拆接线方式,附接线图
  7. Gentoo 网络接口配置文件说明
  8. 如何使用阿里云ARMS轻松重现用户浏览器问题
  9. Netty 的 ByteBuf 是如何支持 堆内存非池化 实现的
  10. 飞机订票系统(c语言)
  11. docker push latest 和 保存历史版本
  12. keil c51如何添加STC芯片的固件库文件
  13. Windows 和 Linux 系统查询 IP 地址命令
  14. 联想g510升级方案_联想G510更换固态、加装内存条、移机械硬盘至光驱位简记
  15. 如何正确的去学习C语言
  16. 在路上,走更远 ,我的2016
  17. 【Unity】一个使用Dorween实现的血量条显示与血量变化
  18. 如何制作PDF,以及给PDF添加书签
  19. DDOS攻击和发包攻击教学 (仅限于压力测试学习)
  20. SSO单点登录(集成SSO认证服务)

热门文章

  1. mysql5.5 mysqli_php5.5.38增加mysqli扩展
  2. endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...
  3. hadoop可以解决什么问题_聊一聊,临时工外包可以为企业解决什么问题
  4. 计算机cnc键代表啥,计算器上的cnc键表示啥
  5. linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法
  6. 问题 B: 十进制到二进制的转换
  7. leetcode279. 完全平方数
  8. leetcode455. 分发饼干
  9. Spring5 jar包下载
  10. [设计模式]依赖倒转原则