码迷,mamicode.com
首页 > 其他好文 > 详细

[ZOJ 3607] Lazier Salesgirl

时间:2019-05-03 18:09:57      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:scanf   相等   最大的   时间间隔   class   ack   name   clu   间隔   

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3607

思路:最小的相隔时间肯定是两个时间的间隔,只需要计算每个时间间隔所获的价值的平均值,取最大的平均值以及其对应的时间间隔即可,注意,当平均值相等的时候,取时间间隔小的。
AC 代码:

#include <cstdio>
#include <vector>
#include <iostream>

using namespace std;

const int maxn = 1005;

int test;
int n;
int p[maxn];
int t[maxn];
vector<int> distime;

double solve(int dis_t)
{
    double ret = 0.0;
    int i;
    for(i = 1; i <= n; i++)
    {
        if(t[i]-t[i-1] <= dis_t)
            ret += p[i];
        else
            break;
    }
    return ret / (i-1);
}

int main()
{
    scanf("%d",&test);
    while(test--)
    {
        distime.clear();
        scanf("%d",&n);
        for(int i = 1; i <= n; i++)
            scanf("%d",&p[i]);
        t[0] = 0;
        for(int i = 1; i <= n; i++)
        {
            scanf("%d",&t[i]);
            distime.push_back(t[i] - t[i-1]);
        }
        double ave,ans_distime,ans_ave = -1.0;
        //for(vector<int>::iterator it = distime.begin();it != distime.end();it++)
        for(int i = 0; i < distime.size(); i++)
        {
            ave = solve(distime[i]);
            if(ave > ans_ave)
            {
                ans_distime = distime[i];
                ans_ave = ave;
            }
        }
        printf("%.6lf %.6lf\n",ans_distime,ans_ave);
    }
}

[ZOJ 3607] Lazier Salesgirl

标签:scanf   相等   最大的   时间间隔   class   ack   name   clu   间隔   

原文地址:https://www.cnblogs.com/youpeng/p/10805764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!