贝茜放慢脚步


题目链接:https://www.acwing.com/problem/content/1936/

题解

按照顺序,时间和距离哪个在前先算哪个,依次往后算即可。

代码

#include 
#include 
#include 
#include 
#include 
#include 
#define pb push_back
using namespace std;

vector a,b;

int main()
{
    int n;
    cin >> n;
    
    int u;
    char ch;
    while(n -- ) {
        cin >> ch >> u;
        if(ch == 'T') a.pb(u);
        else b.pb(u);
    }
    
    b.pb(1000);
    
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    
    double t=0,s=0,v=1;
    int i = 0,j = 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 ++ ;
        }
    }
    cout << fixed << setprecision(0) << t << endl;
    return 0;
}