公式

A - 山登りトレーニング / Mountain Climbing Training 解説 by kyopro_friends


初心者の方へ


この問題は場合分けにより解くことができます。

条件を整理すると以下の通りまとめることができます。

  • \(P\geq T\) であれば答えは \(0\)
  • \(P < T\) のとき
    • \(S_i\geq T\) となる \(S_i\) が存在するとき、その人に師事すればよいので答えは \(C\)
    • 存在しないとき、どのような順で誰に師事しても標高を \(T\) 以上にできないため答えは \(-1\)

\(S_i\geq T\) となる \(S_i\) が存在する」は「\(\max_i S_i \geq T\)」と同値なので、この条件で判定することもできます。

\(N=1\) のケースでは、入力の \(2\) 行目が空行になるため、入力の受け取り方法や、 \(0\) 要素の max を取る可能性に注意して実装してください。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n, p, t, c;
  cin >> n >> p >> t >> c;
  vector<int>s(n-1);
  if(n == 1){
    s.push_back(-1);
  }else{
    for(int i=0; i<n-1; i++) cin >> s[i];
  }

  if(p >= t){
    cout << 0 << endl;
  }else if(*max_element(s.begin(), s.end()) >= t){
    cout << c << endl;
  }else{
    cout << -1 << endl;
  }
}

実装例 (Python)

N, P, T, C = map(int, input().split())
if N ==1 :
  S = [-1]
else:
  S = list(map(int, input().split()))

if P >= T:
  print(0)
elif max(S) >= T:
  print(C)
else:
  print(-1)

投稿日時:
最終更新: