题解:CF186B Growing Mushrooms

· · 题解

感谢@LYC20111119 提供的部分思路。

思路

一道非常简单的模拟题。

主要就是看是先用 u 速度还是 v 速度,只需要计算出来用这两种速度的高度,然后取一个 max 就可以了。

最后按高度从大到小(如果高度相同就按编号从小到大)排一下序,输出答案。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,t1,t2;
double k;
struct node{
    int id;//选手的编号
    double a,b;//速度
    double ans;//高度
}e[N];
bool cmp(node a,node b){
    if(a.ans==b.ans) return a.id<b.id;//高度相同,按序号排序
    return a.ans>b.ans;
}
int main(){

    cin>>n>>t1>>t2>>k;//输入
    k/=100;//换成百分比
    for(int i=1;i<=n;i++){
        cin>>e[i].a>>e[i].b;
        e[i].id=i;
        double ans1=e[i].a*t1*(1-k)+e[i].b*t2,ans2=e[i].b*t1*(1-k)+e[i].a*t2;
        //看是先用a速度生长高度高,还是用b速度生长速度高
        e[i].ans=max(ans1,ans2);
    }
    sort(e+1,e+n+1,cmp);//排序
    for(int i=1;i<=n;i++){
        cout<<e[i].id<<" ";//输出
        printf("%.2lf\n",e[i].ans);
    }

    return 0;
}

不喜勿喷,最后点个赞吧,QWQ。