关闭

选拔忧虑

57人阅读 评论(0) 收藏 举报

选拔忧虑

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;
}
这题一定要记住是选取临近的找最大值啊!!
代码菜鸟,如有错误,请多包涵!!
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26455次
    • 积分:2255
    • 等级:
    • 排名:第16696名
    • 原创:211篇
    • 转载:8篇
    • 译文:0篇
    • 评论:3条
    最新评论