【NOIP模拟】健美猫

题面

分析

此题真是一言难尽。下面这么大一串,真的只是在讲一个小模拟。。。此题也是被几个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

走向通用智能的核心:任务树的建立

来源&#xff1a;混沌巡洋舰人工智能的一个核心问题&#xff0c;是用已有的算法解决新的目标。对于人类来说&#xff0c;最常用的方法是得到和目标最相近的子目标&#xff0c; 子目标的子目标&#xff08;比如饿了就要找吃的&#xff0c;找吃的就要去菜市场买菜&#xff09;&am…

关于HotSpot VM以及Java语言的动态编译 你可能想知道这些

目录 1 HotSpot VM的历史2 HotSpot VM 概述2.1 编译器2.2 解释器2.3 解释型语言 VS 编译型语言3 动态编译3.1 什么是动态编译3.2 HotSpot VM对字节码的处理方式3.3 为什么不静态编译1 HotSpot VM的历史 SUN/Oracle JDK中使用的JVM是HotSpot VM. SUN JDK从1.3.1版本开始采用HotS…

马斯克向中国保证

来源&#xff1a;金融时报美国当地时间3月20日&#xff0c;特斯拉公司&#xff08;Tesla Inc.&#xff09;首席执行官埃隆马斯克 &#xff08;Elon Musk&#xff09;通过网络参加中国发展高层论坛会议。马斯克在会议上表示&#xff0c;特斯拉公司将不会向美国政府提供其车辆在中…

对抗攻击层出不穷?神经科学带来新突破、导出智能统一框架,Hinton:我早有洞见

来源 &#xff1a;AI科技评论编译 &#xff1a;bluemin校对 &#xff1a;青暮最近的神经科学研究指出了如何击败对抗性示例&#xff0c;并为实现更具弹性、一致性和灵活性的人工智能指明了道路。对抗性示例是当今深度学习研究的热点。数据中微妙的&#xff0c;通常是无形的更改…

增强现实系统的三大关键技术是什么?

来源&#xff1a;VR村增强现实系统的主要任务是进行真实世界和虚拟物体的无缝融合&#xff0c;需要解决真实场景和虚拟物体的合成一致性问题。为了确保真实世界和虚拟对象的无缝融合&#xff0c;根据Ronald Azuma对增强现实技术的定义&#xff0c;在AR应用系统开发中必须要解决…

51 Nod 1116 K进制下的大数

1116 K进制下的大数 基准时间限制&#xff1a;1 秒 空间限制&#xff1a;131072 KB 分值: 20 难度&#xff1a;3级算法题 收藏 关注 有一个字符串S&#xff0c;记录了一个大数&#xff0c;但不知这个大数是多少进制的&#xff0c;只知道这个数在K进制下是K - 1的倍数。现在由你…

数字化?智能化?中国企业智能制造现状究竟如何 李炳积 工信头条 昨天

来源&#xff1a;先进制造业各国智能制造现状30年来&#xff0c;在智能制造领域&#xff0c;各国从早期侧重于智能设计的数值模型和离线模型&#xff0c;发展到以智能制造过程优化为目标在线智能系统&#xff0c;从传统行业进军新兴行业。欧美技术基础较好&#xff0c;对高端技…

2021年MEMS传感器产业链变化与趋势

来源&#xff1a;宸元资本一MEMS基本概念和相关产业政策MEMS基本概念微机电系统&#xff08;MEMS, Micro-Electro-Mechanical System&#xff09;&#xff0c;也叫做微电子机械系统、微系统、微机械等&#xff0c;指尺寸在几毫米乃至更小的高科技装置。微机电系统其内部结构一般…

python基础之流程控制

python流程控制 python的流程控制跟大多数的语言一样&#xff0c;包括if条件语句、for循环语句、while循环语句&#xff1b;跳出循环continue&#xff0c;break等 写在前面 python中的运算 1&#xff09;算数运算 以下假设变量&#xff1a;a10&#xff0c;b20&#xff1a; 2&am…

从自动驾驶汽车开始,机器学习开始与物理世界交互

大数据文摘出品来源&#xff1a;Wired编译&#xff1a;王烨今天&#xff0c;有许多人工智能与我们互动的例子&#xff0c;使我们的生活的效率更高。智能体向我们通过电子商务网站向我们推荐产品&#xff0c;通过社交媒体为我们推荐新闻&#xff0c;通过交友应用向我们推荐朋友&…

突破!在人工染色体中存储图片和视频:天津大学元英进团队验证DNA数据存储新方法...

来源&#xff1a;中国生物技术网天津大学元英进教授团队从头编码设计合成了一条长度为254,886 bp、专用于数据存储的酵母人工染色体&#xff0c;借助无线通信中前沿的纠错编码将两张经典图片和一段视频存储于高效组装的人造染色体&#xff0c;利用酵母繁殖实现了数据稳定复制&a…

10分钟 在linux里创建.net core helloworld控制台程序

官方教程 安装linux https://www.cnblogs.com/LittleFeiHu/p/9749455.html 第一步 &#xff1a;选择和你本机适用的Linux版本&#xff0c;我这里用的是18.04. 第二步 &#xff1a;注册秘钥&#xff0c;产品仓储&#xff0c;以及安装依赖项&#xff0c;每台机器只需要注册一次&a…

陈天桥雒芊芊脑机接口中心等团队研究登顶刊:超声波“读心”

来源&#xff1a;澎湃新闻 作者&#xff1a;贺梨萍 脑机接口&#xff08;BMIs&#xff09;在全球的研究正如火如荼&#xff0c;神经科学家们希望通过这样一种设备将神经活动映射到相应的行为&#xff0c;它以读取和解释大脑活动&#xff0c;并向计算机或机器发送指令。实际上&a…

图灵奖得主 Yann LeCun 最新文章 :自监督学习,人工智能世界的“暗物质”

来源&#xff1a;AI前线作者&#xff1a;Yann LeCun &#xff0c;Ishan Misra译者&#xff1a;王强策划&#xff1a;刘燕近年来&#xff0c;AI 产业在开发“可以从大量经过细致标记的数据中学习的 AI 系统”这个研究领域上取得了巨大进步。这种监督学习的范式在训练专业模型方面…

无脑人:我们真的需要大脑吗?

© Mental Floss来源&#xff1a;神经科技编辑&#xff1a;Yezi审阅&#xff1a;mingzlee7在一次讨论中&#xff0c;有位德高望重的人&#xff08;我不会透露这个人是谁&#xff09;告诉我&#xff1a;“我认为自我存在于心脏&#xff01;而不是大脑&#xff01;那些声称意…

JS数组的需要注意的问题

一、在js中数组是我们经常使用的数据类型&#xff0c;也为我们提供了很多方法。但是有些方法需要注意使用&#xff1a; 1、indexOf(args)&#xff1a;匹配一个数组中与args相等的项的索引位置&#xff0c;如果该数组包含这个匹配项则返回第一个匹配的索引&#xff0c;并停止匹配…

基金委最新改革:9大科学部整合为4个板块资助布局

来源&#xff1a;微信公众号科学网&#xff08;sciencenet-cas&#xff09;3月24日&#xff0c;国家自然科学基金委员会&#xff08;以下简称自然科学基金委&#xff09;第八届委员会第四次全体会议在北京召开。会议上&#xff0c;自然科学基金委主任、党组书记李静海作全委会工…

Leetcode--236. 二叉树的最近公共祖先(Java)

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己的…

万恶之源 - Python运算符与编码

格式化输出 现在有个需要我们录入我们身边好友的信息,格式如下: ------------ info of Alex Li ----------Name : Alex LiAge : 22job : Teacher Hobbie: girl------------- end ---------------- 我们现在能想到的办法就是用一下方法: name input(请输入姓名:) age …

世界最大、最复杂的GPU!这颗集成1000亿个晶体管的芯片长什么样?

来源&#xff1a;EETOP3月25日消息 英特尔于昨日举办了直播活动&#xff0c;新上任的 CEO 帕特基辛格&#xff08;Pat Gelsinger&#xff09; 发表了演讲&#xff0c;并展示了采用 7nm 工艺的 Xe-HPC 高性能 GPU&#xff0c;代号 “Ponte Vecchio”。这款产品封装了 47 个芯片&…