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\n",res);
32         
33     }
34     return 0;
35 }

 

posted @ 2017-04-06 14:25  N维解析几何  阅读(196)  评论(0编辑  收藏  举报