zoukankan      html  css  js  c++  java
  • RCC 2017 Qual 1 Mail.Ru, April 2, 2017 Problem C. Magic Artifact

    题意:一款游戏有n个关卡,正常条件下第i个关卡耗时ai,游戏中存在一个加速器,如果在某个关卡获得这个加速器,那么在这之后的关卡中使用的时间为bi

    在每个关卡获得加速器的概率是pi,如果你可以随便安排关卡的顺序,那么输出最少的通关的期望时间

    考虑Ci=Ai-Bi,那么按照给定顺序的期望是B1+...Bn+P1(C1)+P2(C1+C2)+..+Pn(C1+..+Cn)

    考虑交换i和i+1,那么对结果的影响是Pi+1*Ci-Pi*Ci+1  ,只有该式<=0的时候,交换才不亏,所以可以得到

    Ci/Pi<=Ci+1/Pi+1交换才有价值,那么按照Ci/Pi进行排序就好了,不过要特别注意的是,Pi=0的时候要特殊处理,处理成INF就好了

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e5+5;
     4 
     5 int a[maxn],b[maxn],p[maxn],d[maxn];
     6 double c[maxn];
     7 
     8 bool cmp(int i,int j){
     9     if(p[i]==0)return false;
    10     if(p[j]==0)return true;
    11     return c[i]/p[i]<=c[j]/p[j];
    12 }
    13 
    14 int main(){
    15     int t,n;cin>>t;
    16     while(t--){
    17         cin>>n;
    18         double res=0;
    19         for(int i=0;i<n;i++)
    20             cin>>a[i]>>b[i]>>p[i],c[i]=a[i]-b[i],res+=b[i],
    21             d[i]=i;
    22         
    23         sort(d,d+n,cmp);
    24         double t=0;
    25         for(int i=0;i<n;i++){
    26             int tt=d[i];
    27             t+=c[tt];
    28             res+=p[tt]*t/1e7;
    29         }
    30         
    31         printf("%.6f
    ",res);
    32         
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    matlab之simulink仿真入门
    20160205.CCPP体系具体解释(0015天)
    logistic回归具体解释(二):损失函数(cost function)具体解释
    Java 垃圾回收之垃圾回收算法
    synchronized
    如何中断线程
    yield函数
    Linux
    notify和notifyAll的区别
    Sleep和Wait的区别
  • 原文地址:https://www.cnblogs.com/jihe/p/6673292.html
Copyright © 2011-2022 走看看