题解:CF186B Growing Mushrooms
感谢@LYC20111119 提供的部分思路。
思路
一道非常简单的模拟题。
主要就是看是先用
最后按高度从大到小(如果高度相同就按编号从小到大)排一下序,输出答案。
代码
#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。