基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
 
51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间、鼠标轨迹等特征计算用户对于网站的满意程度。

 
现有的统计工具只能统计某一个窗口中,用户的满意程度的均值。夹克老爷想让你为统计工具添加一个新feature,即在统计均值的同时,计算窗口中满意程度的标准差和中位数(均值需要向下取整)。
Input
第一行是整数n与k,代表有n次操作,时间窗口大小为k。 
(1 <= n <= 10^6, 1 <= k <= 100) 接下来的n行,每行代表一次操作。操作有“用户访问”、“查询均值”、“查询方差”、“查询中位数”四种。每行的第一个数代表操作类型。 操作数1:用户访问
输入格式:<1, v>
用户的满意度v为闭区间[0, 100]中的任意整数。用户每访问一次,数据更新,移动统计窗口。 操作数2:查询均值
输入格式:<2>
统计窗口内的用户满意度的均值。 操作数3:查询方差
输入格式:<3>
统计窗口内用户满意度的方差 操作数4:查询中位数
输入格式:<4>
统计窗口内用户满意度的中位数 p.s. 在有查询请求时,窗口保证不为空
p.s.s. 有查询请求时,窗口可能不满
Output
对于“查询均值”、“查询方差”、“查询中位数”操作的结果,输出保留两位小数。
Input示例
12 3
1 1
1 2
1 3
2
3
4
1 4
1 5
1 6
2
3
4
Output示例
2.00
0.67
2.00
5.00
0.67
5.00 题目描述不是太清楚,大概就是有k个窗口,
操作1:往这k个窗口中放数字,如果已经有a个数字了,那么下一个数字放在a+1。
  如果a == k,即放满了,就从头开始覆盖即从a = 0开始放数字。
操作2:求这k个数字的平均数,如果没有放满就是求这a个数字的平均数。
操作3:求这k个数字的方差,如果没有放满就是求这a个数字的方差。
操作4:求这k个数字的中位数,如果没有放满就是求这a个数字的中位数。 这题只要解决2个问题就解决了:求方差和求中位数。
方差:D(X) = E(X^2)- E(X)^2;(E(X)是均值)
  所以我持续统计并更新这k个数字的和与平方和即可。 
中位数:对这k个数字排序然后用索引找中间的数即可。 这题的坑点:均值输出整数+".00",而不是保留两位的浮点数。 代码:
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <stdio.h>
using namespace std;
typedef long long ll;
#define INF 2147483647 int X[]; //当前i位置的数字
double sum1 = ; //总和
int X2[]; //平方数
double sum2 = ; //平方和
int cur = ; // 游标指向
bool full = false; //是否装满了 int main(){
int n,k;
cin >> n >> k; int k1,k2;
while(n--){
scanf("%d",&k1);
if(k1 == ){
scanf("%d",&k2); sum1 = sum1 - X[cur] + k2;
X[cur] = k2;
sum2 = sum2 - X2[cur] + k2*k2;
X2[cur] = k2*k2;
cur++;
if(cur == k) cur = ,full = true;
}else if(k1 == ){ int t = k;
if(!full) t = cur;
printf("%ld.00\n",(ll)sum1/t);
}else if(k1 == ){
int t = k;
if(!full) t = cur;
printf("%.2lf\n",sum2/t-(sum1/t)*(sum1/t));
}else{
int t = k;
if(!full) t = cur;
int a[];
for(int i = ;i < t; i++) a[i] = X[i];
sort(a,a+t);
if(t % != ){
printf("%.2lf\n",1.0*a[t/]);
}else{
printf("%.2lf\n",1.0*(a[t/-]+a[t/])/);
}
}
}
return ;
}

51nod 1785 数据流中的算法 (方差计算公式)的更多相关文章

  1. 51nod 1785 数据流中的算法 | STL的应用

    51nod 1785 数据流中的算法 题面 动态求平均数.方差.中位数. 题解 这道题的坑: 平均数在答案中是向下取整输出并在后面添加".00" 方差:平方的平均数减去平均数的平方 ...

  2. 【51NOD】数据流中的算法

    [算法]数学 [题解] 1.平均数:累加前缀和.//听说要向下取整? 2.中位数:双堆法,大于中位数存入小顶堆,小于中位数存入大顶堆,保证小顶堆内数字数量≥大顶堆,奇数则取小堆顶,偶数则取两堆顶/2. ...

  3. AC日记——数据流中的算法 51nod 1785

    数据流中的算法 思路: 线段树模拟: 时间刚刚卡在边界上,有时超时一个点,有时能过: 来,上代码: #include <cstdio> #include <cstring> # ...

  4. 【51nod 1785】数据流中的算法

    Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度.   现有的统计工具只能统计某一个窗口中,用户的满意程 ...

  5. [算法]最小的K个数和数据流中的中位数

    1. 最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路 Java 中的PriorityQueue是 ...

  6. 数据流中的中位数 Find Median from Data Stream

    2019-04-17 16:34:50 问题描述: 问题求解: class MedianFinder { PriorityQueue<Integer> smaller; PriorityQ ...

  7. [LeetCode解题报告] 703. 数据流中的第K大元素

    题目描述 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包 ...

  8. 剑指offer63:数据流中的中位数

    题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. ...

  9. Motion Detection Algorithms视频中运动检测算法源代码及演示代码

    原文地址:http://www.codesoso.com/code/Motion_Detection.aspx 本文实现了在连续视频数据流中几种不同的运动检测算法,他们都是基于当前帧图像和前一帧图像的 ...

随机推荐

  1. 「JavaSE 重新出发」05.02 泛型数组列表、包装类

    泛型数组列表 ArrayList 是一个采用类型参数(type parameter)的泛型类(generic class). java ArrayList<Employee> staff ...

  2. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  3. Node Sass does not yet support your current environment: Windows 64-bit然如何解决,cnpm此问题解决方法

    这里直接说了node sass不支持当前环境,所以可以直接删掉原来不支持本机的node sass,再重新安装就行了 删除: npm uninstall --save node-sass 安装: npm ...

  4. vertical-align到底是个啥

    https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align http://phrogz.net/css/vertical-align ...

  5. Git diff 代码比较的高级技巧

    Git diff 代码比较的高级技巧 作者:offbye 出处:http://blog.csdn.net/offbye/article/details/6592563 Git是使用branch来管理不 ...

  6. 使用sourceMap文件定位小程序错误信息

    sourceMap是什么 在前端开发过程中代码难免会有错误,即便是再小心,也有可能出现 Cannot read property 'xxx' of null 这样的低级失误,debug自然是家常便饭. ...

  7. vi 编辑器的日常使用

    命令行模式: 光标管理 text  屏幕 行 单词 gg 跳转到文档头部 H 跳转到屏幕首行 ^  或 数字0 跳转到行首 w 向前 G 跳转到文档尾部 M 跳转到屏幕中行 $ 跳转到行尾 b 向后 ...

  8. springmvcjson中文乱码处理

    在sping.xml中增加配置信息 <bean class="org.springframework.web.servlet.mvc.method.annotation.Request ...

  9. 关于Vue实例的生命周期(2)

     关于Vue实例的生命周期(2) 创建(create)->挂载(mount)->更新(update)->销毁(destory) 钩子函数触发事件 beforeCreate 在实例初始 ...

  10. nodejs安装与概述

    第一部分:安装与测试 1 官方下载地址 https://nodejs.org/en/ 2 测试是否安装成功? window下打开CMD窗口   输入:node -v  => 显示安装的nodej ...