题面

分析

此题真是一言难尽。下面这么大一串,真的只是在讲一个小模拟。。。此题也是被几个julao反复讲,各种五花八门的奇淫巧技,什么数学变形,树状数组,差分,单调……好吧,我是那种只会30分暴力的人,也没理由嫌弃这些我听不懂的做法。

于是看到了一篇极其妙的题解,思路是建坐标系,然而这位julao的题解的code跑出来只有30pts。借用大佬的图
首先,以i为横坐标,ai为纵坐标,建立平面直角坐标系,将点全部描在坐标系里,并画出y=x的直线,可以发现,点到直线的竖直距离
之和,就是我们要求的答案

然而怎么求不同顺序的答案呢?

只需要左右平移这条直线!
可以发现,向左平移,在这条直线上方的点,到直线的竖直距离会减小1,而在这条直线下方或处于直线上的点,到直线的竖直距离会 加1。

如果是向右平移,显然是恰好相反,所以要枚举所有情况,只需要将这条直线向一个方向,平移n次,每次平移一个单位。
然而有一个特殊的点,n->1
假如选择向左平移,1~n-1个点的值的计算方式完全不变。
但是第n个点会变,所以每次平移特殊处理第n个点。


其实你或许已经发现了,图象是答案的几何含义,本质上我们的平移操作等效于在序列上移动下标。
到这里,大体思路就已经出现了,但是我觉得细节也是比较难懂的(或许是我太菜了),所以我再稍微补充一下。

1.怎么维护每次移动后的直线上下方的点呢?用up,down记录在直线上方下方的点的个数。先预处理点对于初始直线的上下方个数。再维 护一个d[ ]数组,每出现一个处于直线上方的点,就将这个 d[s]++(s为这个点到直线的竖直距离)。这 表示在直线上方的距离处s处,有d[s]个 点,由初中数学知识易证,y=x向左平移1单位等价于向上平移1单位。所以当我们一共平移了i个单位后,我们就需要利用d[i]来更 新在直线上方的点,显然,在直线上方的点的数量up-=d[i],因为本来离初始直线距离为i的点,在直线经过i个单位的平移后,已经落在 了直线上,而不再在直线上方。相应地down+=d[i]

2.因为ai<=n的,所以第n个点本来一定是属于down集的,现在相当于它移到了第一个位置,只要比1大的,就可从down集出来进入up集。
3.计算答案的时候是tmp+=down-up根据2中所述,最后一个点显然属于down集,所以它已经被算成了,对答案的贡献加一,所以真正的更新方式应是tmp+=down-up-1.
温馨提示:1.longlong
2.数组开四倍。我挂了半天,最后瞎搞胡乱改错然后过了。01 dalao给我指点了一下,因为按照序列的理论上来说,d的偏移量是2n,而这又是个环,所以是4n空间。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 4000100
#define ll long long
ll a[N],d[N];
ll n,ans,tmp,up,down;
int main()
{scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);if(a[i]>i)tmp+=a[i]-i,up++,d[a[i]-i]++;else tmp+=i-a[i],down++;}    ans=tmp;for(int i=1;i<=n;i++){tmp+=down-up-1;tmp-=n-a[n-i+1],tmp+=a[n-i+1]-1;if(a[n-i+1]>1)up++,down--,d[i+a[n-i+1]-1]++;down+=d[i],up-=d[i];ans=min(ans,tmp);    }printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/NSD-email0820/p/9735072.html

【NOIP模拟】健美猫相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  5. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  6. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  7. NOIP模拟(10.22)T2 杆子的排列

    杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...

  8. Noip 模拟练习5

    Noip 模拟练习5 满分300,本人240.修正后300. 难度中等. 太空密码 Description 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜 用于接收宇宙射线.一天从 ...

  9. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

  10. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

最新文章

  1. Java长见到的面试题,看你能答出几题,就知道自己有多菜了
  2. Python入门100题 | 第031题
  3. 记录一次查询log的经历
  4. 计算机应用技术爱岗敬业,高职专业人才培养方案(计算机应用技术).doc
  5. C++标准(Standard for ProgrammingLanguage C++)
  6. 移动应用的黄金四分类
  7. Proxy error: Could not proxy request错误解决
  8. Linux下合并分解加密解密PDF文件
  9. python ggplot为什么不能取代matplotlib_为什么geom_bar()不会像python ggplot中那样更改填充颜色?...
  10. JavaScript正则表达式与注册验证
  11. J2EE 领域的一些技术框架结构图
  12. 直接内存回收中的等待队列
  13. 商务与经济统计学 第五章案例题
  14. JAVA映射文件到内存,java之内存映射文件
  15. ArrayList集合排序方式总结
  16. 研究生的压力应对与心理健康 测试题答案
  17. jmeter压测学习11-模拟浏览器访问web页面
  18. MySQL查询优化系列文章
  19. 《摄氏华氏温度转换》
  20. 个人站长应该怎么设置服务器才可以无视CC攻击

热门文章

  1. 每日一题(51)—— 大小端判断
  2. MFC CStringArray 字符串数组类 使用方法
  3. 计算机语言学 自然语言处理程序,利用知网进行(计算机)自然语言处理
  4. python中order函数_order by排序
  5. python周末吃什么_中午不知道吃什么?用Python爬取美团外卖评论帮你选餐!
  6. c语言gcc汇编文件,[汇编]gcc生成汇编.s文件 $ gcc -Og -S sum.c /$ gcc -Og -S -masm=intel sum.c 与 反汇编 objdump...
  7. 电脑k歌软件_金麦客专业k歌app下载|金麦客专业k歌软件 手机安卓版v1.1.5.0 下载...
  8. LeetCode 2146. 价格范围内最高排名的 K 样物品(BFS)
  9. LeetCode 1742. 盒子中小球的最大数量
  10. 04.卷积神经网络 W3.目标检测