zoukankan      html  css  js  c++  java
  • MAX Average Problem HDU

    debug半天,也没找出错误,就是卡frend快读有点恶心,
    参考博客https://blog.csdn.net/zyszlb2003/article/details/94427222

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    const int MAXN=100010;
    int sum[MAXN];
    int a[MAXN];
    int q[MAXN];
    int read()
    {
        int res=0,ch,flag=0;
        if((ch=getchar())=='-')             //判断正负
            flag=1;
        else if(ch>='0'&&ch<='9')           //得到完整的数
            res=ch-'0';
        while((ch=getchar())>='0'&&ch<='9')
            res=res*10+ch-'0';
        return flag?-res:res;
    }
    
    //输入外挂
    int tot;
    const int BUF=25000000;
    char Buf[BUF],*buf=Buf;
    inline void read(int &a)
    {
        for(a=0;*buf<48;buf++);
        while(*buf>47) a=a*10+*buf++-48;
    }
    inline double calc(int j,int i)
    {
    	return (double)(sum[i]-sum[j])/(i-j);
    }
    int n,k;
    int main() {
    	tot=fread(Buf,1,BUF,stdin);
    	while(1) {
    //		n=read(),k=read();
    		if(buf-Buf+1>=tot) break;
    		read(n),read(k);
    		sum[0]=0;
    		for(int i=1; i<=n; i++) {
    //			a[i]=read();
    //			sum[i]=sum[i-1]+a[i];
    			read(sum[i]);
                sum[i]+=sum[i-1];
    		}
    		int l=1,r=0;
    		q[1]=0;
    		double ans=0;
    		for(int i=k; i<=n; i++) {
    			int j=i-k;
    			while(l<r && calc(q[r], q[r-1] ) >=calc(i-k,q[r-1]))
    				r--;
    			q[++r]=j;
    			while(l<r && calc(q[l+1],i)>=calc(q[l],i))
    				l++;
    			ans=max(ans,1.0*(sum[i]-sum[q[l]])/(i-q[l]) );
    		}
    		printf("%.2lf
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    while练习
    运算符
    作业
    [新手必看] 17个常见的Python运行时错误
    作业
    day04
    作业
    算法模板——线段树2(区间加+区间乘+区间求和)
    1798: [Ahoi2009]Seq 维护序列seq
    1708: [Usaco2007 Oct]Money奶牛的硬币
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12516869.html
Copyright © 2011-2022 走看看