LuoguP1007単板橋
トピックの背景
戦争は危機的な時期を迎えました。あなたは輸送チームのキャプテンであり、輸送部隊を率いて前線に物資を届けます。輸送作業は問題と同じくらい退屈です。ワクワクしたいので、兵士たちに目の前の丸太橋の景色を眺めるように命じ、橋の下にとどまって兵士たちを眺めます。一枚板の橋は非常に狭く、一人しか収容できなかったため、兵士たちは非常に怒っていました。橋の上を歩いている二人が出会うと、どうしても二人は迂回し、橋を下ってもう一人を先に通すことができるのは一人だけ。ただし、複数の人が同時に同じ場所に滞在することができます。
タイトル説明
突然、コマンドセンターから、敵の爆撃機があなたのいる一枚板の橋に向かって飛んでいるというメッセージが表示されます。安全のために、あなたの軍隊は丸太橋を撤回しなければなりません。単板橋の長さはLで、兵士は座標が整数の場合にのみ滞在できます。すべての兵士の速度は1ですが、兵士はある瞬間に座標0またはL + 1の位置に到着し、単板の橋を離れます。
各兵士には最初の向きの方向があり、一定の速度でこの方向に歩き、自分で方向を変えることはありません。しかし、二人の兵士が顔を合わせた場合、すれ違うことができないので、振り返って歩き続けます。振り返るのに時間はかかりません。
以前の怒りのために、あなたはもはやあなたの兵士をコントロールすることができません。たとえ、各兵士が最初に向いている方向さえ知らないのです。したがって、あなたは少なくともあなたの軍隊が丸太橋を避難するのにどれくらいの時間がかかるか知りたいです。さらに、本部は敵の攻撃を阻止するための準備もしているので、軍隊が丸太橋から避難するのにかかる時間も知る必要があります。
入力フォーマット
最初の行:単一板橋の長さを表す整数L。橋の座標は1 ... Lです
2行目:最初に橋に残った兵士の数を表す整数N
3行目:各兵士の初期座標を表すN個の整数があります。
出力フォーマット
線は1つだけで、2つの整数を出力します。これらはそれぞれ、軍隊が単一板の橋から撤退するための最小時間と最大時間を表します。2つの整数はスペース文字で区切られます。
指示/ヒント
当初、2人の兵士が同じ座標にいませんでした。
データ範囲N <= L <= 5000
写真のように2人の兵士が出会うとき、彼らはなります、(この絵は私自身の手描きが、それのようではないんです)ターンの周りに、私たちは兵士を考えることができますので、我々は、同じ兵士として2人の兵士を扱うことができ回します兵士がお互いを通り抜けるときに周りが単純化され(少し恐ろしいように聞こえるかもしれません)、最大値と最小値を見つける場所がわかります。
最大値:終点に最も近く、互いに向かって歩いている人の時間。
最小値:ブリッジのすべての最小値の中で最大値
ACコード
#include<bits/stdc++.h>
using namespace std;
int main (void)
{
int n,l;
cin>>l>>n;
int maxn=0,minn=0,q;
for(int i=1;i<=n;i++)
{
cin>>q;
maxn=max(maxn,max(q,l-q+1));
minn=max(minn,min(q,l-q+1));
}
cout<<minn<<' '<<maxn;
}