公式
A - 山登りトレーニング / Mountain Climbing Training 解説
by
A - 山登りトレーニング / Mountain Climbing Training 解説
by
kyopro_friends
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
この問題は場合分けにより解くことができます。
条件を整理すると以下の通りまとめることができます。
- \(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)
投稿日時:
最終更新:
