题解 P2338 【[USACO14JAN]失败的滑雪Bessie Slows Down】

2017-06-29 10:32:17


//这个难度有毒啊其实是一道pj难度的模拟题
#include<bits/stdc++.h>
using namespace std;
int n,x,n1,n2,l,r;
double a[100000],b[100000],y,z;
char c;
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    for (int i=1;i<=n;i++){
            cin>>c>>x;
            if (c=='T')a[++n1]=x;
                else b[++n2]=x;
        }
    sort(a+1,a+1+n1);sort(b+1,b+1+n2);
    x=1;l=1;r=1;//x 1/速度,y 路程,z 时间 
    for (int i=1;i<=n;i++)//然后是大力模拟拉
        if ((r>n2||(b[r]-y)*x+z>=a[l])&&(l<=n1)){
                if ((a[l]-z)/x+y>1000)break;
                y+=(a[l]-z)/x;z=a[l];x++;l++;
            }
            else{
                if (b[r]>1000)break;
                z+=(b[r]-y)*x;y=b[r];x++;r++;
            }
    cout<<int((1000-y)*x+z+0.499999)<<endl;//输出貌似是取整数部分的所以要四舍五入
}