hdu4882ZCC Loves Codefires(贪心)

题目链接:

啊哈哈,选我选我

题目:

ZCC Loves Codefires

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 182    Accepted Submission(s): 97

Problem Description

Though ZCC has many Fans, ZCC himself is a crazy Fan of a coder, called "Memset137".

It was on Codefires(CF), an online competitive programming site, that ZCC knew Memset137, and immediately became his fan.

But why?

Because Memset137 can solve all problem in rounds, without unsuccessful submissions; his estimation of time to solve certain problem is so accurate, that he can surely get an Accepted the second he has predicted. He soon became IGM, the best title of Codefires.
Besides, he is famous for his coding speed and the achievement in the field of Data Structures.

After become IGM, Memset137 has a new goal: He wants his score in CF rounds to be as large as possible.

What is score? In Codefires, every problem has 2 attributes, let‘s call them Ki and Bi(Ki, Bi>0). if Memset137 solves the problem at Ti-th second, he gained Bi-Ki*Ti score. It‘s guaranteed Bi-Ki*Ti is always positive during the round time.

Now that Memset137 can solve every problem, in this problem, Bi is of no concern. Please write a program to calculate the minimal score he will lose.(that is, the sum of Ki*Ti).

Input

The first line contains an integer N(1≤N≤10^5), the number of problem in the round.

The second line contains N integers Ei(1≤Ei≤10^4), the time(second) to solve the i-th problem.

The last line contains N integers Ki(1≤Ki≤10^4), as was described.

Output

One integer L, the minimal score he will lose.

Sample Input

3
10 10 20
1 2 3

Sample Output

150

Hint

Memset137 takes the first 10 seconds to solve problem B, then solves problem C at the end of the 30th second. Memset137 gets AK at the end of the 40th second.
L = 10 * 2 + (10+20) * 3 + (10+20+10) * 1 = 150. 

Author

镇海中学

Source

2014 Multi-University Training Contest 2

Recommend

We have carefully selected several similar problems for you:  4881 4880 4879 4878 4877

哎。。比赛的时候将double写成float,悲剧。。。以为思路错了。。结果没有。。

我的思路是既然求最小的失去分数。。故我可以求每个题目的性价比。。选性价比低的题目先做。。

代码为:

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn=100000+10;
int n;

struct no
{
    int time;
    int score;
    double average;
}node[maxn];

bool cmp(no a,no b)
{
    return a.average<b.average;
}

int main()
{
    __int64 ans,pd;
    while(~scanf("%d",&n))
    {
        for(int i=1;i<=n;i++)
            scanf("%d",&node[i].time);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&node[i].score);
            node[i].average=(node[i].time*1.0)/node[i].score;
        }
        sort(node+1,node+1+n,cmp);
        pd=ans=0;
        for(int i=1;i<=n;i++)
        {
            pd=node[i].time+pd;
            ans=ans+pd*node[i].score;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

hdu4882ZCC Loves Codefires(贪心),布布扣,bubuko.com

时间: 2024-10-29 19:09:39

hdu4882ZCC Loves Codefires(贪心)的相关文章

HDU4882ZCC Loves Codefires(贪心)

ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 823 Accepted Submission(s): 438 Problem Description Though ZCC has many Fans, ZCC himself is a crazy Fan of a coder, called "Mem

hdu4882-ZCC Loves Codefires(贪心)

题目:hdu4882-ZCC Loves Codefires 题目大意:给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道problem需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最少. 解题思路: e1 e2 k1  1   2 k2 3    4 这样的两道问题的组合方式有两种:12组合 费用: 1 * 3 + (1 + 2) * 4 = 1 * 3 + 2 *4 + 1 * 4 21组合 费用: 2 * 4 +

hdu 4882 ZCC Loves Codefires(贪心)

题目链接:hdu 4882 ZCC Loves Codefires 题目大意:就是CF的比赛,根据时间的推迟会相应的扣掉题目的分数,问说最少扣几分. 解题思路:相邻交换法,判断两个题目之间的比率确定前后位置. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5+5; typedef __int64 ll; struct st

hdu 4882 ZCC Loves Codefires (贪心 推导)

题目链接 做题的时候凑的规律,其实可以 用式子推一下的. 题意:n对数,每对数有e,k, 按照题目的要求(可以看下面的Hint就明白了)求最小的值. 分析:假设现在总的是sum, 有两个e1 k1 e2 k2 则先选e1 为 (sum+e1)*k1+(sum+e1+e2)*k2 先e2: (sum+e2)*k2 + (sum+e1+e2)*k1. 比较两个式子发现不同的部分分别是 e1*k2   e2*k1; 比较大小移向 e1/k1  e2/k2, 那个小,就选那个,能达到最小. 官方题解:

hdu 4882 ZCC Loves Codefires(数学题+贪心)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4882 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋:http://user.qzone.qq.com/593830943

hdu 4882 ZCC Loves Codefires(贪心)

# include<stdio.h> # include <algorithm> # include <string.h> using namespace std; struct node { int v; int t; }; struct node a[100010]; bool cmp(node a,node b) { return a.v *a.t+(a.v+b.v)*b.t<b.v*b.t+(a.v+b.v)*a.t; } int main() { int

hdoj 4882 ZCC Loves Codefires 【贪心】

题目大意:求最少被扣除的时间 策略 如题: 对于两个邻近的题目i, j,对于他们对于在他们之前解决的题目的总时间的贡献t是不影响的,对于他们之后的总时间也不影响 这就推得对每一对相邻的他们对前后都是无影响的, 如果是交换的话原来是(t+e[i])*k[i] + (t+e[i]+e[j])*k[j], 就变成了(t+e[j])*k[j] + (t+e[i]+e[j])*k[i] 改变的就是 原来的 e[i]*k[j] 变成了 e[j]*k[i] 这两个式子之间满足 e[i]*k[j] < e[j]

HDU 4882 ZCC Loves Codefires(贪心水)

HDU 4882 ZCC Loves Codefires 题目链接 题意:给定一些任务,每个任务有e,k,e表示完成需要时间,k表示完成后消耗,为完成时间t * k,求一个顺序使得完成消耗最少 思路:贪心,知道k大的尽量早晚餐,t小的尽量早完成,所以t / k小的尽量早完成,排个序即可 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int

2014 (多校)1011 ZCC Loves Codefires

自从做了多校,整个人都不好了,老是被高中生就算了,题老是都不懂=-=原谅我是个菜鸟,原谅我智力不行.唯一的水题. Problem Description Though ZCC has many Fans, ZCC himself is a crazy Fan of a coder, called "Memset137". It was on Codefires(CF), an online competitive programming site, that ZCC knew Mems