zoukankan      html  css  js  c++  java
  • HDU 4882 ZCC Loves Codefires

    排序

    首先,看到这种题如果确定是排序,第一反应就是排序条件:Ei/Ki ,或者Ki/Ei。。。(注意浮点数)

    对于两个题i,j;判断这两个题的顺序方式如下:

    设两个题之前所有题时间和为 tt;

    则 若i 在j 前:score(i)=Ki*(tt+Ei)+Kj*(tt+Ei+Ej);

          j 在i 前:score(j)=Kj*(tt+Ej)+Ki*(tt+Ej+Ei);

    两式相减得: score(i)-score(j)=Kj*Ei-Ki*Ej;

    所以,若想使score(i)<score(j),则有Kj*Ei<Ki*Ej;

    因为 Ei>=1,Ki>=1;所以Ei/Ki<Ej/Kj;

    ps:ans可能会超int,所以用long long;注意输出long long。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 typedef long long ll;
     7 
     8 const int maxn=100010;
     9 
    10 struct node {
    11     int e,k;
    12 }p[maxn];
    13 
    14 bool cmp (node x,node y){
    15     if (x.e*1.0/x.k<y.e*1.0/y.k)
    16         return true ;
    17     return false ;
    18 }
    19 
    20 int main (){
    21     int n;
    22     ll t,ans;
    23     while (~scanf ("%d",&n)){
    24         for (int i=0;i<n;i++)
    25             scanf ("%d",&p[i].e);
    26         for (int i=0;i<n;i++)
    27             scanf ("%d",&p[i].k);
    28         sort (p,p+n,cmp);
    29         t=ans=0;
    30         for (int i=0;i<n;i++){
    31             t+=p[i].e;
    32             ans+=t*p[i].k;
    33         }//cout<<p[1].e*1.0/p[1].k<<endl;
    34         printf ("%I64d
    ",ans);
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    cunda 常用命令,删除,创建,换源
    kivy画板
    基础易忘记
    关于tkinter
    airtest常用指令
    在kivy中加图片
    QQ消算轰炸,我好无聊真的
    自动华键盘使用
    自动化键盘,python
    canvas中的优先级,.after最前,before最底,canvas中间,部件在布局下面
  • 原文地址:https://www.cnblogs.com/gfc-g/p/3867187.html
Copyright © 2011-2022 走看看