Official

B - 一本道の通行止め / Road Closure on a One-Way Street Editorial by physics0523


高橋君は地点 \(1\) から出発して地点 \(1,2,3,\dots\) の順にしか地点に到達できないため、明らかに以下の戦略が最適です。

  • 許可証が \(1\) 枚以上残っている限り、 \(i=2,3,\dots,N\) について、以下を繰り返す。
    • 地点 \(i-1\) から地点 \(i\) への道が通行止めであれば、そこに許可証を \(1\) 枚利用する。

解除しきれなかった通行止めのうち最も番号の若いものが地点 \(k,k+1\) 間であるとき、答えは \(k\) です。
\(M\) 枚以下の許可証で全ての通行止めを解除できたとき、答えは \(N\) です。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int N,M;
  cin >> N >> M;
  vector<int> W(N+1,0);
  for(int i=1;i<N;i++){
    cin >> W[i];
    if(W[i]==1 && M>0){
      M--;
      W[i]=0;
    }
  }
  W[N]=1;
  for(int i=1;;i++){
    if(W[i]>0){
      cout << i << "\n";
      return 0;
    }
  }
  return 0;
}

posted:
last update: