2018/7/31--zznu-oj-问题 G: 方差 普拉斯--【两重暴力循环求方差即可!】
问题 G: 方差 普拉斯
时间限制: 1 Sec 内存限制: 128 MB
提交: 94 解决: 17
[提交] [状态] [讨论版] [命题人:admin]
题目描述 方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。
若x1,x2,x3......xn的平均数为k,则方差s^ = /n * [(x1-k)^+(x2-k)^+.......+(xn-k)^] 。
给出M个数,从中找出N个数,使这N个数方差最小。
输入 第1行:2个数M,N,(M > N, M <= )
第2 - M + 1行:M个数的具体值( <= Xi <= )
输出 输出最小方差 * N的整数部分。
样例输入 样例输出
大致思路:
1、求方差,暴力即可!暴力下来也只有两重for循环!不会超时!
2、设下标从x1--x2的n个数的方差为s1,平均数k1,下标x1+1—x2+1 的方差为s2,平均数为k2, 前后两者有一点联系,就是平均数会涉及到一些重复计算,分别设为k1和k2,k2=k1-x1/n+(x2+1)/n,省去了一些计算复杂度!但是,方差s1和s2并不能直接像类似于k1和k2那样直接转化!那么s2需要老老实实地再计算一遍!(我看着样例,直接得出了s1得到s2的式子!WA了一次!)因此时间复杂度不会因为一点k1得到k2的优化而发生变化!毕竟乘法时间复杂更大!
3、记得这个样本序列需要进行排序,升序排序一遍即可!不排序我WA了!
4、别被题面吓住了!尤其是开篇的两道题目造成的深深的心理阴影,后面的题目其实才简单呢!!!多做题,才能克服自己内心深处的恐惧!
5、会不会超double类型呢!貌似不会!假设(x1-k)等于1e4,那么平方会就是1e8,并且还有N个数,那个总的和就是1e12次方,基本会超过double了!不放心的话,可以在求xi的时候把(xi-k)*(xi-k)/N 调整成 (xi-k)/N*(xi-k),这样就肯定没问题了。
题解:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
#include<algorithm>
#define ll long long
using namespace std;
#define N 10000
#define ll long long
double a[N+]; int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF){
for(int i=;i<=m;i++)
scanf("%lf",&a[i]);
sort(a+,a++m);
// for(int i=1;i<=m;i++)
// printf("*%lf ",a[i]); a[]=;
double sum=,k=,s2=,ans=999999999.9;
for(int i=;i<n;i++)
sum+=a[i];
for(int i=n;i<=m;i++){
sum=sum+a[i]-a[i-n];
k=sum/n;
s2=;
for(int j=i;j>=i-n+;j--)
s2=s2+(a[j]-k)/(1.0*n)*(a[j]-k);
ans=min(ans,s2);
} printf("%lld\n",(ll)(ans*1.0*n+1e-)); } return ;
}
(两重for循环暴力就AC了!)
2018/7/31--zznu-oj-问题 G: 方差 普拉斯--【两重暴力循环求方差即可!】的更多相关文章
- ZZNU 2125:A + B 普拉斯(傻逼题+大数加法)
2125: A + B 普拉斯 时间限制: 1 Sec 内存限制: 128 MB 提交: 94 解决: 28 [提交] [状态] [讨论版] [命题人:admin] 题目描述 "别人总说 ...
- ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】
2080 : A+B or A-B(点击左侧标题进入zznu原题页面) 时间限制:1 Sec 内存限制:0 MiB提交:8 答案正确:3 提交 状态 讨论区 题目描述 Give you three s ...
- matlab求方差,均值,均方差,协方差的函数
1. 均值 数学定义: Matlab函数:mean >>X=[1,2,3] >>mean(X)=2 如果X是一个矩阵,则其均值是一个向量组.mean(X,1)为列向量的均值,m ...
- 【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差
[题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...
- 网络流板子/费用流板子 2018南京I题+2016青岛G题
2018南京I题: dinic,链式前向星,数组队列,当前弧优化,不memset全部数组,抛弃满流点,bfs只找一条增广路,每次多路增广 #include <bits/stdc++.h> ...
- 2018/03/31 每日一个Linux命令 之 date
date 命令主要用于查看和修改时间和时区 -- 这里主要学习基本的查看和设置时间和时区的方法. 直接显示日期 date '+%D' 效果 vagrant@hong:~$ date '+%D' 03/ ...
- OJ上 G++ 与 C++ 的区别
1.输出double类型时,如果采用G++提交,scanf采用%lf,prinf采用%f,否则会报错 2.使用GCC/G++的提醒: 对于64位整数, long long int 和 __int64 ...
- oj 中G++和C++区别(转)
1.输出double类型时,如果采用G++提交,scanf采用%lf,prinf采用%f,否则会报错 2.使用GCC/G++的提醒: 对于64位整数, long long int 和 __int64 ...
- 2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)
传送门 生成函数好题. 题意简述:求nnn个点的树的叶子数期望值. 思路: 考虑fnf_nfn表示nnn个节点的树的数量. 所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0) ...
随机推荐
- 【VS开发】【CUDA开发】如何在MFC中调用CUDA
如何在MFC中调用CUDA 有时候,我们需要在比较大的项目中调用CUDA,这就涉及到MFC+CUDA的环境配置问题,以矩阵相乘为例,在MFC中调用CUDA程序.我们参考罗振东iylzd@163.com ...
- Python 实现二分查找(递归版)
二分查找 为什么使用二分查找: python中的列表,一般取值为遍历这个列表,直到取到你想要的值,但是如果你的列表是一个有着百万元素的列表呢,那样for循环遍历列表就会很慢,可能会循环几十万次,才能找 ...
- 作为linux新手需掌握的常用命令大全
学了几周的linux系统,接触最多的就是各种各样的命令,此篇随笔作为对之前所学的各中命令的整理扩展. 1.man命令 man命令作为第一个要学的Linux命令是因为它的作用非常强大——可用于查看命令的 ...
- clog就用clog的后缀名
/tmp/log/shuanggou.clog /tmp/log/shuanggou.log /tmp/log/shuanggou_success.log /tmp/log/shuanggou_err ...
- Spring 启动加载资源到内存
前言 在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载.初始化缓存.特定任务的注册等等.我找到了三种方式解决下面的问题. 1.使用PostConstruct注解 这种解决方 ...
- Oracle 计算时间格式平均值
select to_char((to_date('2019-07-01', 'yyyy-mm-dd') + numtodsinterval(avg(begin_time_second), 'secon ...
- 使用github经验
使用github经验 良好的使用习惯,就像是每天来看朋友圈一样,不一定每天都有东西要提交,但是一定要一直有一个 repository 在维护,持续的提交代码.同时也要注意自己的 repository的 ...
- SQL Server系统函数:系统信息函数
原文:SQL Server系统函数:系统信息函数 1.会话id,服务器信息.用户信息 select @@SPID, --返回当前连接的会话ID:SPID @@servername, --SQL Ser ...
- 在docker下SQL Server attach mdf和ldf文件
(DB:MyPost) USE masterGO-- Create database via attachCREATE DATABASE [MyPost] ON ( FILENAME = N'C ...
- LeetCode:626.换座位
题目链接:https://leetcode-cn.com/problems/exchange-seats/ 题目 小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们 ...