2018-2019, ICPC, Asia Yokohama Regional Contest 2018 C、Emergency Evacuation(逆向思维)

C Emergency Evacuation

题意:

输入 r , s ( 500 ) , p ( 2 × r × s ) r,s(500),p(2\times r\times s) r,s(500),p(2×r×s)表示由 r r r行座位,每行有两边,每边 s s s列。
p p p个乘客,接下来给出它们的位置,问乘客下车最少需要多少时间。
2018-2019, ICPC, Asia Yokohama Regional Contest 2018 C、Emergency Evacuation(逆向思维)_第1张图片

题解:

从乘客下车来考虑,不太好做。
不妨从反方向思考,乘客上车,乘客上车最少时间肯定是距离座位远的乘客先上车最优了。

代码:

#include
using namespace std;
typedef long long ll;
const int N=5e6+9;
int r,s,n;
struct T{
    int x,y;
}a[N];
ll mx;
bool cmp(T t1,T t2){
    return t1.x+t1.y>t2.x+t2.y;
}
int main(){
    cin>>r>>s>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].x>>a[i].y;
        a[i].x=r-a[i].x;
        if(a[i].y<=s)a[i].y=s-a[i].y+1;else a[i].y-=s;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)mx=max(mx,1ll*i+a[i].x+a[i].y);
    cout<<mx<<endl;
    return 0;
}

你可能感兴趣的:(2018-2019, ICPC, Asia Yokohama Regional Contest 2018 C、Emergency Evacuation(逆向思维))