51nod 1785 数据流中的算法

来源:互联网 发布:手机音乐合成剪辑软件 编辑:程序博客网 时间:2024/06/05 17:46

好久没做题了,不由想到胡适先生的日记

“无事。打牌。天稍稍凉矣。”

而我王者农药喝多了。。。这周花了一星期的时间,把这学期的课程补了,但还差unity shader没自学。

废话到这里吧。。。


题目很简单,但有坑。。

输出平均数时,只要保留整数部分,小数部分为.00。其他的,按正常double计算即可。

//#include <bits/stdc++.h>#include<stdio.h> #include<queue>#include<cstring> #include<iostream> using namespace std;void read(int&a){    char ch;while(!((ch=getchar())>='0')&&(ch<='9'));    a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}inline void prin_d(int x){    if (x > 9)    {        prin_d(x / 10);    }    putchar(x % 10 + '0');    return ;}int main(){//freopen("51nod_Problem_1785_Test_2_In.txt", "r", stdin);//freopen("out.txt", "w", stdout);int n,k,flag,op,v,tmp,now,num,sum,i,a[110],b[11];double squsum,bef,ans,ave;queue<int> q;while(~scanf("%d%d",&n,&k)){memset(a,0,sizeof(a));memset(b,0,sizeof(b));sum=num=squsum=flag=0;while(n--){read(op);if(op==1){read(v);num++; sum+=v; squsum+=v*v; a[v]++;b[v/10]++;flag=0;q.push(v);if(q.size()>k){tmp=q.front();q.pop();num--; sum-=tmp; squsum-=tmp*tmp; a[tmp]--; b[tmp/10]--;}}else if(op==2){printf("%.2f\n",double(sum/num));}else if(op==3){ave=sum*1.0/num;printf("%.2f\n",squsum/num-ave*ave);}else if(op==4){if(!flag){now=0;tmp=-1;for(i=0;i<=10;now+=b[i],i++){if(((now+b[i])<<1)>=num)break;}for(i=i*10;i<=100;i++){now+=a[i];if((now<<1)>num){if(tmp==-1)bef=i;elsebef=(i+tmp)/2.0;break;}else if(a[i]&&(now<<1)==num)tmp=i;}}flag=1;ans=bef;printf("%.2f\n",ans);}}}}


0 0
原创粉丝点击