基准时间限制: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 ;
}

最新文章

  1. RouteData
  2. .Net内存泄露原因及解决办法
  3. centos 安装 openerp
  4. sql server char nchar nvarchar varchar之間的區別
  5. LeetCode第四题,Add Two Numbers
  6. 开发板ip设置
  7. CodeForces 377B---Preparing for the Contest(二分+贪心)
  8. ORA-00600: 内部错误代码, 参数: [kqlnrc_1]
  9. python的web开发环境Django配置
  10. 【转载】使用CSS将图片转换成黑白(灰色、置灰)
  11. 弹窗滑动,造成body跟随滑动解决办法
  12. Nginx 用最快方式让缓存失效
  13. Typora——安装Pandoc
  14. form表单post提交的数据格式
  15. SQL 运算符
  16. CS229 6.9 Neurons Networks softmax regression
  17. (14)Why some people find exercise harder than others
  18. JVM活学活用——GC算法 垃圾收集器
  19. 【SVN】如果windows用户忘记了svn的用户名和密码怎么办?
  20. python selenium-4自动化测试模型

热门文章

  1. Redis学习笔记(七) 基本命令:Set操作
  2. BZOJ 4516 后缀数组+ST+set
  3. 一种比较高级的方法也可以修改windows为默认启动系统
  4. radio判断是否为空
  5. WebApi不支持跨域访问
  6. 关于css3背景图片渐变的规则
  7. Pyhton学习——Day26
  8. 树莓派搭建 Google TV
  9. Vue学习之路第八篇:事件修饰符
  10. jQuery 事件流的概念