1785 数据流中的算法
基准时间限制: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 2147483647int X[110];       //当前i位置的数字
double sum1 = 0;  //总和
int X2[110];     //平方数
double sum2 = 0;   //平方和
int cur = 0;     // 游标指向
bool full = false; //是否装满了 int main(){int n,k;cin >> n >> k;int k1,k2;while(n--){scanf("%d",&k1);if(k1 == 1){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 = 0,full = true;}else if(k1 == 2){int t = k;if(!full) t = cur; printf("%ld.00\n",(ll)sum1/t);}else if(k1 == 3){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[110];for(int i = 0;i < t; i++) a[i] = X[i];sort(a,a+t);if(t % 2 != 0){printf("%.2lf\n",1.0*a[t/2]);}else{printf("%.2lf\n",1.0*(a[t/2-1]+a[t/2])/2);}}} return 0;
} 

51nod 1785 数据流中的算法 (方差计算公式)相关推荐

  1. 1785 数据流中的算法(模拟,乱搞)

    1785 数据流中的算法 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 

  2. 51nod-1785:数据流中的算法

    1785 数据流中的算法 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户 ...

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

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

  4. 数据结构与算法之字符凭拼接最低字典序和数据流中取中位数

    数据结构与算法之字符凭拼接最低字典序和数据流中取中位数 目录 字符凭拼接最低字典序 数据流中取中位数 1. 字符凭拼接最低字典序 题目描述 思路: 创建一个比较器,比较的内容是(o1+o2).comp ...

  5. ⭐算法入门⭐《堆》中等02 —— LeetCode 703. 数据流中的第 K 大元素

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   设计一个找到数据流中第 ...

  6. 算法:数据流中的中位数

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

  7. 概率论中均值、方差、标准差介绍及C++/OpenCV/Eigen的三种实现

    概率论是用于表示不确定性声明(statement)的数学框架.它不仅提供了量化不确定性的方法,也提供了用于导出新的不确定性声明的公理.在人工智能领域,概率论主要有两种用途.首先,概率法则告诉我们AI系 ...

  8. 方差计算公式的变形及应用

    方差计算公式 对于一组数据x1,x2...xnx_1,x_2...x_nx1​,x2​...xn​,若其平均数为x‾\overline xx则方差公式为 S2=1n[(x1−x‾)2+(x2−x‾)2 ...

  9. Leetcode295 数据流中的中位数-最小堆和最大堆

    题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如,[2,3,4] 的中位数是 3:[2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两 ...

最新文章

  1. (13)中值滤波和双边滤波
  2. python技术开发证书_python+证书
  3. KVM — 内存虚拟化
  4. PHP 错误与异常 笔记与总结(14 )记录和发送异常信息
  5. java创建对象new后面为啥可以传入参数_来复习一下Java的对象知识
  6. RecyclerView跳转到指定位置,RecyclerView上下滑动监听,RecyclerView滑动速度
  7. lua5.3 获取table的元素数量
  8. AJAX解惑篇(转)
  9. 判别模型和生成模型(Discriminative Model Generative Model)【转】
  10. SQL Sever select定制查询
  11. python 包含汉字的文件读写之每行末尾加上特定字符
  12. android查看统计项目的方法数
  13. preg_match 参数获取两个_摄像相机标定到底是啥?标定完成得到的参数有什么用?...
  14. OSPF协议单域配置实例
  15. P68是什么意思 IP67和IP68等级有什么区别
  16. Java:珠穆朗玛峰
  17. [译]-100行代码从零实现 Facebook 的 Recoil 库
  18. 【ArcGIS教程一】如何用ArcGIS做一张专题地图
  19. 程序猿520python表白利器——丘比特之箭
  20. 京东app连接电脑上访问突然跳转不到电脑版网页

热门文章

  1. wow服务器已满 队列位置5,《魔兽世界》前夕版本中“碧空之歌”排队人数近万,有必要排吗?...
  2. Java黑皮书课后题第10章:**10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级
  3. Java黑皮书课后题第8章:*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离
  4. 蓝牙配对模式 java_BLE(低功耗蓝牙)配对和绑定
  5. 001.Parted工具使用
  6. HDU1425 A Chess Game
  7. 博客作业——创建个人技术博客(建议在cnblogs.com上创建),并写一个自我介绍,列出你对这门课的希望和自己的目标。同时具体列出你计划每周花多少时间在这门课上(包括上课时间)。...
  8. 基于python爬虫技术的应用_基于Python爬虫技术的应用
  9. python 更改输出的颜色_python 输出指定的颜色
  10. [译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)