大众博客

读者,你进入了学习的殿堂

选拔忧虑

选拔忧虑

Time Limit: 1000MS Memory limit: 65536K

题目描述

小白最近要参加一个小区的竞选,这个小区总共有n栋楼编号1-n,第i个楼共有A[i]个人,其中有B[i]个人是支持他选拔的,小区的委员会规定选拔的规则为:从n栋楼中选出k座编号连续的楼,这k栋楼的支持率为一个人总的支持率。支持率为k座楼支持的人的总数与k座楼的总人数之比。小白听到这个规则就是一脸懵逼,所以就去找小黑帮忙算出最大的支持率,但是小黑在忙着泡妹子,没有时间搭理他,所以友谊的小船说翻就翻。现在小白找你帮忙,你能帮他吗???

输入

多组输入。每组输入两个数n和k(k<=n<=1000),接下来的一行,共有n个数表示每栋楼的总人数,接下来的一行有n个数,表示每栋楼支持的人数。
每一栋楼的人数不会超过1000,保证输入合法。

 

输出

对于每一组输入,输出一个数,表示小白最大的支持率,结果保留4位小数。

示例输入

2 2
2 3
1 3

示例输出

0.8000

提示

 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
 #include <algorithm>
 #include <stdio.h>
using namespace std;
struct node
{
    double z;
    double s;
    double s1;
} a[10002];
int main()
{
    int n,m,i,j;
    while(~scanf("%d %d",&n,&m))
    {
        for(i = 0; i < n; i++)
        {
            scanf("%lf",&a[i].z);
        }
        for(i = 0; i < n; i++)
        {
            scanf("%lf",&a[i].s);
            a[i].s1 = a[i].s/a[i].z;
        }
        double sum1;
        double sum2;
        double max = 0;
        for(j = 0; j <= n-m; j++)
        {
            sum1 = 0;
            sum2 = 0;
            for(i = j; i < m+j; i++)
            {
                sum1 = sum1+a[i].z;
                sum2 = sum2+a[i].s;
            }
            if(max < sum2/sum1) max = sum2/sum1;
        }
        printf("%.4lf\n",max);
    }
    return 0;
}
这题一定要记住是选取临近的找最大值啊!!
代码菜鸟,如有错误,请多包涵!!
阅读更多
版权声明:欢迎转载,谢谢支持! https://blog.csdn.net/qq_34952846/article/details/51553180
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

选拔忧虑

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭