1. 程式人生 > 實用技巧 >【洛谷】P1007獨木橋

【洛谷】P1007獨木橋

哎,我在發博的路上收到了挫折

今天我一個JS硬是申請4遍,差點被禁

堅強!碼農的字典中沒有屈服!

今天來寫一下獨木橋吧

題目:https://www.luogu.com.cn/problem/P1007

首先自行腦補一下,你在橋上看風景,看風景的人在轟炸機上看著你。

假設你就在轟炸機上欣賞觀看士兵,以你的視角,你會看到什麼?一堆迷彩服在移動,當兩個士兵相遇時,他們會認為自己調頭了。然鵝,因為你在高空,你會看到他們‘穿過’了對方(你也可以看成靈魂互換)。這麼來看我們就可以做了。

比方說,4號位置上有一個士兵,如果他開始向左,那在兩秒後在2號位一定有一個士兵,雖然不一定是他。

這樣來看,這道題就十分容易。先把士兵一一讀進去。設士兵在m位置,則他向左下橋需要m時間,向右就是L-m+1個(這兩個值肯定一大一小抑或一樣大)。再取max(每個士兵下橋最大值的最大值,就是所有時間的最大值),min(注意!/敲黑板

這個儲存的不是最小值,而是每個士兵下橋最小值的最小值),在打擂臺更新答案即可。

程式碼:

#include<bits/stdc++.h>//萬能頭
using namespace std;
int main()
{
    //freopen("","r",stdin)
    //freopen("","w",stdout)檔案輸入輸出,奧賽用,一般做題不是大資料沒什麼用
    int l,n,m,a,b,max=0,min=0;//定義變數
    cin>>l>>n;//讀入
    if(n==0)
    {
       cout<<0<<" "
<<0; } else{ while(n--) { cin>>m; a=m; b=l-m+1; if(a>b) { if(a>max) max=a; if(b>min) min=b; } if(a<b) { if(b>max) max=b; if(a>min) min=a; }
//比較大小,打擂臺更新答案 } cout<<min<<" "<<max;//輸出 return 0; //fclose(stdin) //fclose(stdout) } }
View Code

一開始思路搞錯,然鵝程式碼能執行,於是乎......

哎,各位碼友一起努力!