日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/4/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod 1785 数据流中的算法 (方差计算公式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 数据流中的算法 (方差计算公式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。