题意:对称的车厢中间有一个过道,但是一个位置只能有一个人,车厢内有 q 个人,求 q 个人全部走出车厢的最小步数。
分析:反着想,问题等价于把 q 个人送入各自位置的最小步数,那肯定先送远的再送近的(想一想,如果先送近的再送远的,同一排车厢靠近过道的比靠近外边的近,先把近的靠近过道的送到位置上,靠外边的就咕咕了!)
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 5*1e5+10;
int num[N];
int r,c,q;
bool cmp(int a,int b){return a>b;}
int main()
{
scanf("%d%d%d",&r,&c,&q);
for(int i=0;i<q;i++)
{
int x,y; scanf("%d%d",&x,&y);
int dis;
if(c>=y) dis=c-y+1;
else dis=y-c;
dis+=(r-x+1);
num[i]=dis;
}
sort(num,num+q,cmp);
int ans=0;
for(int i=0;i<q;i++)
{
ans=max(ans,num[i]+i);
}
printf("%d",ans);
}