洛谷P2125 题解
吐槽:
只能说这道题很数学,本数学蒟蒻推了半天没推出来,只知道要用绝对值,幸亏教练提醒,才勉强想出正解(似乎不是这样的),真的是很无语。
以上皆为吐槽本题,可直接 跳过
分析:
既然题目是要使书架上的书一样多,那么就一定要求平均数了
\(s=\sum_{i=1}^n book_i,s=s\div n\),\(s\)即为平均数继续分析,我们将平均数减掉,得出一个书架需要改变的量\(x_1,x_2,\)···\(x_n\),这时我们发现,我们可以得出一个方程组
\(\begin{cases}x_1=a_1-a_n\\x_2=a_2-a_1 \\x_3=a_3-a_2\\\cdots\\x_n=a_n-a_{n-1}\end{cases}\)$\Longrightarrow $
\(\begin{cases}a_1=x_1+a_n\\a_2=x_2+a_1 \\a_3=x_3+a_2\\\cdots\\a_n=x_n+a_{n-1}\end{cases}\)
(其中\(a_i\)(\(i\in N^+\))为SY从\(i\)书架向下一个书架抱\(a_i\)本书)我们惊喜的发现,我们得出了这样一个方程组 \(\begin{cases} a_1=x_1+a_n\\ a_2=x_2+x_1+a_n\\ a_3=x_3+x_2+x_1+a_n\\ \cdots\\a_n=x_n+x_{n-1}+\cdots+x_1+a_n\end{cases}\)
得出以上方程之后,继续观察,发现第一问:SY最少抱多少本书,即求\(sum=\sum_{i=1}^n \left | a_i \right |\)的最小值(\(\left | a_i \right |\)表示数\(a_i\)的绝对值)
得:\(sum= \left |y_1+a_n \right |+\left | y_2+a_n \right |+\left | y_3+a_n \right |+\cdots+\left | y_n+a_n \right |\)\(\because n \in E\)(\(E\)表示奇数集)
\(\therefore\)当\(a_n=y_k\)(其中\(k=\frac{n}{2}+1\))时,\(sum\)有最小值。
第一问迎刃而解~~~
剩下的便变得简单起来
因为我们\(a_i\)设的是SY从\(i\)书架抱到到下一个书架的书籍
所以SY从\(i\)书架抱到到上一个书架的书籍为\(-a_{i-1}\)
部分代码
1.前缀和:
用于求\(y_i\)
for(LL i=1;i<=n;i++)
{
sum[i]=sum[i-1]+book[i]-s; //前缀和标准写法
}
2.中位数:
用于求\(a_n\)
这里有两种方法:
- 法一:排序+查找(时间代价:总程序32ms)
sort(sum+1,sum+n+1);
LL mid=sum[n/2+1];//中位数
- 法二:nth_element(c++自带函数库,时间代价:总程序12ms)
nth_element(sum+1,sum+n/2+1,sum+n+1);
LL mid=sum[n/2+1];//更快的中位数求法
综上,nth_element要快很多,我的名字果然牛逼
具体用法:nth_element(头位置,中位数位置,尾位置);
好吧,这道题数学分析很难,但代码确实很简单,比AC自动机,FFT,那些好多了
给你一个假代码(逃
#include<bits/stdc++.h>
#define LL long long
#define Maxn 5000011
#define QwQ 1
#define QAQ 0
using namespace std;
int n;
LL book[Maxn];
LL s=0;
LL sum[Maxn];
LL s2=0;
LL veb[Maxn];
int main()
{
cin>>n;
for(LL i=1;i<=n;i++)
{
scanf("%lld",&book[i]);
s+=book[i];
}
s/=n;//平均数
for(LL i=1;i<=n;i++)
{
sum[i]=sum[i-1]+book[i]-s;
book[i]=sum[i];
}
sort(sum+1,sum+n+1);
LL mid=sum[n/2+1];//中位数
/*
nth_element(sum+1,sum+n/2+1,sum+n+1);
LL mid=sum[n/2+1];更快的中位数求法
*/
for(LL i=1;i<=n;i++)
{
s2+=abs(sum[i]-mid);
veb[i]=book[i]-mid;
}
printf("%lld\n",s2);
printf("%lld %lld\n",-veb[n],veb[1]);
for(LL i=2;i<=n;i++)
{
printf("%lld %lld\n",-veb[i-1],veb[i]);
}
return mid==0?max(QwQ,QAQ):0;
}
洛谷P2125 题解的更多相关文章
- [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码
[洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...
- 洛谷P5759题解
本文摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p5759 \[这道题重在理解题意 \] 选手编号依次为: \ ...
- 关于三目运算符与if语句的效率与洛谷P2704题解
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...
- c++并查集配合STL MAP的实现(洛谷P2814题解)
不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. ...
- 洛谷P2607题解
想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...
- 洛谷P2125图书馆书架上的书 题解报告
题目描述 图书馆有n个书架,第1个书架后面是第2个书架,第2个书架后面是第3个书架……第n-1个书架后面是第n个书架,第n个书架后面是第1个书架,第i个书架上有b[i]本书.现在,为了让图书馆更美观, ...
- 【洛谷】题解 P1056 【排座椅】
题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...
- 洛谷P3572题解
这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...
- [洛谷P1972][题解][SDOI2009]HH的项链
别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如 ...
随机推荐
- esxi虚机迁移到Workstation
虚拟机的文件管理由VMware Workstation来执行.一个虚拟机一般以一系列文件的形式储存在宿主机中,这些文件一般在由workstation为虚拟机所创建的那个目录中. 如下图所示:(< ...
- 嵌入式物联网32 ARM linux 等创客学院学习视频共享给大家
大家手机号登录学习链接即可观看 有坛友说手机号登录不上 具体自测 http://www.makeru.com.cn/live/1392_303.html?s=60220走进嵌入式http:// ...
- VirtualBox中安装CentOS使得在ssh和外网都能正常链接
一.网卡模式选择 网卡1:Host-only 用于主宿机互访,这是主宿机通过192.168.56.X这一网络通信,主机是否能上网不影响双方通信 网卡2:NAT 宿机用这一网卡通过主机上网 二.具体配置 ...
- Codeforces 777D:Cloud of Hashtags(水题)
http://codeforces.com/problemset/problem/777/D 题意:给出n道字符串,删除最少的字符使得s[i] <= s[i+1]. 思路:感觉比C水好多啊,大概 ...
- Altium Designer设计PCB--如何设置铺铜与导线或过孔的间距
笑话: 到银行汇款,车临时停路边上. 为了怕交警罚就把朋友留下看车,跟他说有查车的过来了告诉我一声. 进去几分钟果然有交警来了. 那个朋友风风火火地闯进银行大声吼道:“大哥,警察来了,快走啊!” 偌大 ...
- C#常用正则表达式回顾
项目中有些时候需要用到正则表达式,但是自己对正则表达式不熟悉,每次学习完,过一段时间(长时间)不用,就又忘了,每次需要用到的时候都需要百度下,比较麻烦,这里把C#中经常用到的正则表达式做下总结. 正则 ...
- 使用kubectl管理k8s集群(二十九)
前言 在搭建k8s集群之前,我们需要先了解下kubectl的使用,以便在集群部署出现问题时进行检查和处理.命令和语法记不住没有关系,但是请记住主要的语法和命令以及帮助命令的使用. 在下一篇,我们将讲述 ...
- 串门赛: NOIP2016模拟赛——By Marvolo 丢脸记
前几天liu_runda来机房颓废,顺便扔给我们一个网址,说这上面有模拟赛,让我们感兴趣的去打一打.一开始还是没打算去看一下的,但是听std说好多人都打,想了一下,还是打一打吧,打着玩,然后就丢脸了. ...
- 树链剖分 [JLOI2014]松鼠的新家
[JLOI2014]松鼠的新家 时间限制: 1 Sec 内存限制: 128 MB 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达, ...
- vs2010 安装项目完成桌面快捷方式无法定位程序文件夹 解决方法
本文转载自http://www.cnblogs.com/jasonxuvip/archive/2012/07/13/2589952.html 软件打包工具有很多种,让人不知道选那个方便自己使用,Tig ...