【51nod 1785】數據流中的算法
阿新 • • 發佈:2017-06-24
分享 col esc == namespace 大小 小數 cnblogs -a
Description
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
其實難度主要在中位數……感謝隔壁大佬的思路。
因為v為閉區間[0, 100]中的任意整數,所以開個桶存一下就好了,每次查詢中位數時,從0開始向後掃。
1 #include<stdio.h> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5View Codeusing namespace std; 6 int n,sum,p,num,k,now,cnt,s[105],a[1000050]; 7 int read() 8 { 9 int x=0,f=1;char c=getchar(); 10 while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} 11 while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} 12 return x*f; 13 } 14 int main() 15 { 16 n=read();k=read();17 while(n--) 18 { 19 p=read(); 20 if(p==1) 21 { 22 num=read(); 23 a[++cnt]=num; 24 if(now==k)sum=sum-a[cnt-k]+num,s[a[cnt-k]]--; 25 else now++,sum+=num; 26 s[num]++; 27 } 28 else if(p==2)printf("%.2lf\n",floor((double)sum/now)); 29 else if(p==3) 30 { 31 double w=(double)sum/now,ans=0; 32 for(int i=cnt-now+1;i<=cnt;i++)ans+=((double)a[i]-w)*((double)a[i]-w); 33 printf("%.2lf\n",ans/now); 34 } 35 else 36 { 37 if(now%2) 38 { 39 int pos=now/2+1,ans=0; 40 for(int i=0;i<=100;i++) 41 { 42 ans+=s[i]; 43 if(ans>=pos) 44 { 45 printf("%.2lf\n",(double)i); 46 break; 47 } 48 } 49 } 50 else 51 { 52 int pos1=now/2,pos2=now/2+1,st=-1,ed=-1,ans=0; 53 for(int i=0;i<=100;i++) 54 { 55 ans+=s[i]; 56 if(ans>=pos1&&st==-1)st=i; 57 if(ans>=pos2&&ed==-1)ed=i; 58 if(st!=-1&&ed!=-1) 59 { 60 printf("%.2lf\n",(double)(st+ed)/2); 61 break; 62 } 63 } 64 } 65 } 66 } 67 return 0; 68 }
【51nod 1785】數據流中的算法