洛谷P1007獨木橋

題面

N 個士兵們在長度 L 的獨木橋上,各有位置(可能重疊站),初始方向有兩種但未知,速度 1,走到 0 或 L+1 即下橋。
N <= L <= 5000
當行進中的士兵和另一個士兵相遇(方向相反的碰撞),則兩人都反向。
問所有士兵都下橋的最短或最長時間。

分析

碰撞反向這個過程可以直接變成兩人交錯通行,因爲士兵都是等同的,不存在問某個士兵何時下橋,而是所有士兵下橋,所以他們的身份是可以互換的。
這樣反向這個過程就可以忽略了,每個士兵走的最長的路即向兩端中的較大者,最短的路即向兩端中的較小者。對所有士兵而言,需要最後一個士兵下橋纔算結束,所以得到每一個士兵後,士兵間取的是max

代碼

#include <stdio.h>
#include<iostream>
#include<cstdlib>
#include<algorithm>
int pos[5005];
using namespace std;
int main()
{
    int maxx = 0, minn = 0;
    int L;
    int n;
    cin >> L>>n;
    for (int i = 0; i < n; i++)cin >> pos[i];
    for (int i = 0; i < n; i++) 
    { 
        maxx = max(max(pos[i], L + 1 - pos[i]),maxx);
        minn = max(min(pos[i], L + 1 - pos[i]),minn);
    }
    cout << minn << " " << maxx;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章