好久没做题了,不由想到胡适先生的日记
“无事。打牌。天稍稍凉矣。”
而我王者农药喝多了。。。这周花了一星期的时间,把这学期的课程补了,但还差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;
else
bef=(i+tmp)/2.0;
break;
}
else if(a[i]&&(now<<1)==num)
tmp=i;
}
}
flag=1;
ans=bef;
printf("%.2f\n",ans);
}
}
}
}