
思路:将D化成T,然后排序进行二路归并,s为已走的路程,v为速度的倒数,t为已用的时间
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 10010;
vector<int> a,b;
int main()
{
int n;
scanf("%d", &n);
char op[2];
for(int i=0;i<n;i++){
int x;
scanf("%s%d",op,&x);
if(*op=='T') a.push_back(x);
else b.push_back(x);
}
b.push_back(1000);
sort(a.begin(),a.end());
sort(b.begin(),b.end());
int i=0,j=0;
double v=1,t=0,s=0;
while(i<a.size()||j<b.size()){
if(j==b.size()||i<a.size()&&a[i]-t<(b[j]-s)*v){
s+=(a[i]-t)/v;
t=a[i];
v++;
i++;
}else{
t+=(b[j]-s)*v;
s=b[j];
v++;
j++;
}
}
printf("%.0lf\n",t);
return 0;
}