已知有 n 个问题,问题所需时间和分数随编号的增加呈上涨,第 i 题在第 x 分钟提交,所得分为 max(0,pi×x) 分 分;Limak 从简到易做,即正着做,Radewoosh 从难到易做,即倒着做,求两人的得分谁更高,如果相同输出 Tie 。
定义 t1,t2 分别记录 Limak 所用时间和 Radewoosh 所用时间。
定义 ls,rs 分别记录 Limak 总成绩和 Radewoosh 总成绩。
for 循环 1~n,Limak 因为是正着做,所以 Limak 的成绩和所用时间与 i 有关,Radewoosh 因为是倒过来做,所以成绩和所用时间与 n−i+1 有关。
最后比较大小,分数一样输出 Tie 否则输出胜利者名字。
此题解时间复杂度为 O(n),n 的数据范围为 1≤n≤50,所以无需担心 TLE。
此题不用担心暴 int。
#include <iostream>
using namespace std;
int n,c,p[51],t[51],Ls,Rs,t1,t2;
int main(){
cin>>n>>c;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
cin>>t[i];
}
for(int i=1;i<=n;i++){
t1+=t[i];//Limak做法
ls+=max(0,p[i]-c*t1);
t2+=t[n-i+1];//Radewoosh做法
rs+=max(0,p[n-i+1]-c*t2);
}
if(ls>rs){
cout<<"Limak";
}
else if(ls==rs){
cout<<"Tie";
}
else{
cout<<"Radewoosh";
}
return 0;
}