Asia Yokohama Regional Contest 2018 C题 - Arithmetic Progressions(思维)
https://codeforces.com/gym/102082
题意
求所有人从电影院的座位上逃出去的最快时间
题解
显然,所有人从电影院的座位上逃出去的最快时间取决于最慢的那个人,那我们可以先把每个人最快(假设前面没人挡他)的逃生时间算出来,那么每个人都对应了一个时间,然后我们从前往后扫一遍时间,如果某时间点t上有x个人,下一时间点t+1就要加上这x-1的等待时间,如果t上没人,那么这一时间点可以容纳一个人,最后把最慢的那个人的逃生时间加上一路推过来的的等待时间就是答案
1 #define IO std::ios::sync_with_stdio(false); 2 #define bug(x) cout<<x<<" "<<endl 3 #include <bits/stdc++.h> 4 #define itor ::iterator 5 using namespace std; 6 #define pb push_back 7 typedef long long ll; 8 typedef double db; 9 const int N=6e5+5; 10 int r,s,p,mx,mi=1e9; 11 int a[N]; 12 int main(){ 13 scanf("%d%d%d",&r,&s,&p); 14 for(int i=1;i<=p;i++){ 15 int x,y; 16 scanf("%d%d",&x,&y); 17 int v=r-x+1; 18 if(y<=s)v+=s-y+1; 19 else v+=y-s; 20 mx=max(mx,v); 21 mi=min(mi,v); 22 a[v]++; 23 } 24 int k=0; 25 for(int i=mi;i<=mx;i++){ 26 if(a[i]==0){ 27 if(k>0)k--; 28 } 29 else{ 30 k+=a[i]-1; 31 } 32 } 33 printf("%d\n",mx+k); 34 }