2020牛客国庆集训派对day4 Emergency Evacuation
Emergency Evacuation
題意:
有n個人在不同的位置上,在最后面有一個出口exit,所有人都要逃離出去(走出出口),且每個格子最多容納一個人,當有人擋在前面時,后面的人必須停留,所有人可以同時移動,問最少需要多少步離開
規則:
坐在座位上的乘客可以朝著過道移動到相鄰的座位上??拷^道的座位上的乘客可以側著身子直接走向過道。
過道上的乘客可以向后移動一排座位。如果乘客在緊急出口前面,也就是最后面的座位排,他/她可以下車
Passengers on a seat can move to an adjacent seat toward the aisle. Passengers on a seat adjacent to the aisle can move sideways directly to the aisle.
Passengers on the aisle can move backward by one row of seats. If the passenger is in front of the emergency exit, that is, by the rear-most seat rows, he/she can get o? the car
題解:
一開始想的是如何模擬所有人的行蹤,但發現其實沒有那么麻煩,如果不存在擋人的情況,那我們可以求出每個人的時間abs(x-r)+abs(y-s),但是事實是存在擋人的情況,我們可以對每個人的時間進行排序(從大到小),歐幾里得距離一樣的就會存在擋人情況,我們讓歐幾里得距離大的先走,相等的給出先后順序離開,他到出口的歐幾里得距離加上他的排名,即(a[i]+i-1)
代碼:
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int a[1024769],ans; bool cmp(int a,int b) {return a>b; } int main() {int r,s,p;cin>>r>>s>>p;for(int i=1;i<=p;i++){int x,y;cin>>x>>y;x--;y--;if(y>=s)y++;a[i]=abs(x-r)+abs(y-s);}sort(a+1,a+1+p,cmp);//從大到小for(int i=1;i<=p;i++){ans=max(ans,a[i]+i-1);}cout<<ans;return 0; }總結
以上是生活随笔為你收集整理的2020牛客国庆集训派对day4 Emergency Evacuation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是高强度螺栓摩擦型连接
- 下一篇: 京东货到付款是怎样付款