首页 > 其他分享 >题解 P8920 『MdOI R5』Variance

题解 P8920 『MdOI R5』Variance

时间:2023-09-15 14:47:54浏览次数:36  
标签:R5 frac int 题解 sum times 端点 Variance LL

题目描述

给你两个长度为 \(n\) 的序列 \(a\) 和 \(b\),让你选 \(n\) 个 \(c_i \in [a_i,b_i]\),使得 \(\frac{1}{n} \sum_{i=1}^n (c_i- \overline c)^2\) 最大。

具体思路

首先我们从方差的定义出发,方差代表了数据的波动程度,公式为:$$s^2=\frac{1}{n} \sum_{i=1}^n (a_i- \overline a)^2$$

其中, \(\overline a =\frac{1}{n} \sum_{i=1}^n a_i\),\(s\) 为方差。

那么我们要让波动程度最大,那就直接选区间的两个端点,但是我们肯定不能直接去枚举选每个区间选左端点还是右端点。

通过思考发现,前一部分我们选左端点,后面部分选右端点,可以导致波动程度最大。但是我们不知道断点应该设在哪里,所以通过枚举断点即可。

那我们显然不可能每次都求一次和,于是考虑化式子然后前缀和解决。

\[s^2=\frac{1}{n}(\sum_{i=1}^n a_i^2+n \times (\frac{\sum_{i=1}^n a_i}{n})^2-2 \times \frac{\sum_{i=1}^n a_i}{n} \times \sum_{i=1}^n a_i) \]

\[s^2=\frac{1}{n}(\sum_{i=1}^n a_i^2+\frac{(\sum_{i=1}^n a_i)^2}{n}-2 \times \frac{(\sum_{i=1}^n a_i)^2}{n}) \]

\[s^2=\frac{1}{n}(\sum_{i=1}^n a_i^2-\frac{(\sum_{i=1}^n a_i)^2}{n}) \]

\[s^2 \times n^2=n \times (\sum_{i=1}^n a_i^2-\frac{(\sum_{i=1}^n a_i)^2}{n}) \]

\[s^2 \times n^2=n \times \sum_{i=1}^n a_i^2-(\sum_{i=1}^n a_i)^2 \]

由于我们求的是 \(a\) 的前一段和 \(b\) 的后一段的信息和,因此需要预处理 \(a\) 的前缀和,\(b\) 的后缀和,\(a\) 的前缀平方和,\(b\) 的后缀平方和。

Code

#include<bits/stdc++.h>
using namespace std;
typedef __int128 LL;
inline void write(LL x){
	static int sta[35];int top=0;
	do{sta[++top]=x%10;x/=10;}while(x);
	while(top)putchar(sta[top--]+'0');
}
const int N=1e6+5;
int a[N],b[N];
LL sa1[N],sa2[N],sb1[N],sb2[N];
int main(){
	int n;scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)scanf("%d",&b[i]);
	for(int i=1;i<=n;i++){
		sa1[i]=sa1[i-1]+a[i];
		sa2[i]=sa2[i-1]+(LL)a[i]*a[i];
	}
	for(int i=n;i>=1;i--){
		sb1[i]=sb1[i+1]+b[i];
		sb2[i]=sb2[i+1]+(LL)b[i]*b[i];
	}
	LL ans=0;
	for(int i=1;i<=n;i++){
		ans=max(ans,n*(sa2[i]+sb2[i+1])-(sa1[i]+sb1[i+1])*(sa1[i]+sb1[i+1]));
	}
	write(ans);
	return 0;
}

标签:R5,frac,int,题解,sum,times,端点,Variance,LL
From: https://www.cnblogs.com/reclusive2007/p/17704967.html

相关文章

  • Fox and Minimal path 题解
    FoxandMinimalpath题目大意构造一张无向图,使得从\(1\)到\(2\)的最短路数量为\(k\)。思路分析我们首先可以发现当\(k=2^t\)时的构造方式:其中只有\(O(\logk)\)个点。当\(k\not=2^t\)时,我们可以将\(k\)二进制拆分,对于每一个二进制位重复上述操作,就可以得......
  • 课堂问题解答
    一、运行结果:由于浮点数在计算机内部的表示方式是有限的,所以在进行浮点数计算时可能会出现精度损失,导致结果不是准确的。在第一行代码中,计算0.05+0.01的结果,预期应该是0.06。然而,由于浮点数的精度限制,实际计算结果可能是一个近似值,例如0.060000000000000005。这就导致了打......
  • NOI 2023 题解
    CopperLoser的题解……Day1T1方格染色有一个\(n\timesm\)的网格,有\(Q\)次操作,每次形如有三种:将\((x_i+j,y_i)\)/\((x_i,y_i+j)\)/\((x_i+j,y_i+j)\)染色,其中\(j=0,1\dotsL_i-1\)。第三种操作至多只有\(5\)次,问之中有多少个格子被染过色。扫描线板子题,首先令......
  • 『题解』P6055
    给出\(N\),求:\[\sum_{i=1}^N\sum_{j=1}^N\sum_{p=1}^{\lfloor\frac{N}{j}\rfloor}\sum_{q=1}^{\lfloor\frac{N}{j}\rfloor}[\gcd(i,j)=1][\gcd(p,q)=1].\]考虑化简。存在一个性质,但是我当时推的时候忘记了。即:\[\sum_{i=1}^N\sum_{j=1}^N\su......
  • 9.11CF1819 题解
    9.11CF1819题解A.ConstructiveProblem简单题,上链接:链接B.TheButcher题意有一张 \(h\timesw\) 的纸片,现在对这张纸片进行 \(n−1\) 次裁剪。每次裁剪后会将其中一半收归(即这一半不会再被裁剪)。保证纸片不会被旋转。告诉你最终裁剪后的 \(n\) 张纸片长宽,问初始......
  • Flutter插件flutter_boost 在android模块中的报红问题解决.
    1,在开发Flutter插件时,打开插件的android项目,准备编写native端的代码时,发现各种报红,代码无法跳转,体验十分不好。就像我下面的截图一样:导入了FlutterBoostflutterBoost源码爆红。但是运行正常。。这说明本身是没有问题的。。分明是没有错误的类都存在。但是就是爆红。。。。可......
  • 拼多多面试题解析:Java实现继承的七种方式!
    大家好,我是小米!今天,我要和大家一起来深入探讨一下拼多多的面试题:Java实现继承有哪7种方式?这是一个相当有深度的问题,不过别担心,我会尽力以通俗易懂的方式给大家讲解清楚,让大家对Java继承有更深刻的理解。什么是继承在Java编程中,继承是一种非常重要的概念,它允许一个类(子类/派......
  • 访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决
    最近在做项目整合这个问题,然后在项目整合的时候,遇到了好多问题,这是其中一个,在此留作记录吧,虽然关键点不是我处理好的。访问前端页面,我先描述一下具体出现的现象:我访问前端jsp页面的时候,jquery文件,js,css样式等都会失效,也就是没有引入到jsp页面当中。查看浏览器console的时候,发现${pa......
  • 代码随想录算法训练营第8天| ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 0
    344.反转字符串mydemo--(一次就过)--(成功)classSolution{public:voidreverseString(vector<char>&s){intlen=s.size();chartmp;inti=0;intj=len-1;while(i<j){tmp=s[i];......
  • VMware Ubuntu18.04找不到网卡ens33问题解决
     查询网卡状态[root@localhost~]# nmcli devicestatusDEVICE   TYPE     STATE      CONNECTIONens33    ethernet unmanaged  --lo        loopback unmanaged  --上面状态提示未接管 开启网络[root@localhost~]#nmcli......