Codeforces Round #121 (Div. 2) B Walking in the Rain

問題概要

問題文
タイルの敷き詰められた歩道がある。
歩行者は今いる次のタイルと次の次のタイルへ移動できる。
歩行者は可能であれば毎日歩道を1回横断する。

タイルの壊れる日数が与えられるので、散歩できる日数を出力せよ。

ただし、散歩が出来なくなる条件は以下のとおり。

  • 最初のタイルが壊れる。
  • 最後のタイルが壊れる。
  • 連続した2つのタイルが壊れる。

解き方

散歩が出来なくなる条件を満たす最小の日数を返せばよい。
ただし、シミュレーションではおそらく間に合わないので、min()やmax()、pairを使ってうまく計算する。

ソースコード

#include <iostream>
using namespace std;
typedef pair<int, int> pint;
#define INF 1000000000 //10^9

int main ()
{
    int n;
    cin>>n;
    int d1;
    cin>>d1;
    int t1,t2=d1;
    pint di=pint(INF,INF);
    for (int i=1; i<n-1; i++) {
        t1=t2;
        cin>>t2;
        if (max(di.first,di.second)>max(t1, t2)) {
            di=pint(t1,t2);
        }
    }
    int dn;
    cin>>dn;
    cout<<min(d1, min(dn, max(di.first,di.second)))<<endl;
    return 0;
}