Asia Yokohama Regional Contest 2018 C题 - Arithmetic Progressions(思维)

本文介绍了一种算法,用于解决电影院中所有人最快逃生时间的问题。通过计算每个人最快逃生时间,并考虑人群拥堵效应来确定整体逃生时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 }

 

转载于:https://www.cnblogs.com/ccsu-kid/p/10599484.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值