ABC204 B 解答
B - Nuts(9)
問題
問題文
N 本の木があり、i 番目の木には Ai 個の木の実が実っています。
シマリスは、次のルールで全ての木から木の実を収穫します。
・実っている木の実が 10 個以下の木からは木の実を収穫しない
・実っている木の実が 10 個より多い木からは、10 個を残して残りの全てを収穫する
シマリスが収穫する木の実の個数の合計を求めてください。
制約
1 ≤ N ≤ 1000
0 ≤ Ai ≤ 1000
入力に含まれる値は全て整数である
考察
ナッツを集めます。この問題はいたって素直ですね。A問題よりも良い子かもしれません。
条件は次の2つです。
1)ナッツが10個以下なら収穫しない
2)10より多ければ10個になるまで収穫
この条件をまとめますと収穫できるナッツの数は
max(0, A-10)
この式で表されます。max関数はmax(a,b)の大きいほうを出力してくれる優れものです。もし、ナッツが10個以下だったら、A-10は0以下になるので、0を出力しますが、10個よりも多い場合には、1以上ですので、収穫できるナッツの数が返ってきます。
「10個残す」というのも地味にポイントかもしれませんね。
特にオーバーフローの心配もありませんので、全ての木に対してこの計算の和を出力すれば答えが求まります。
実装
#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;++i)
#define reps(i,s,n) for(int i=s;i<n;++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;
int main()
{
int n;
cin >> n;
int ans = 0;
rep(i, n)
{
int a; cin >> a;
ans += max(0,a-10);
}
cout << ans << endl;
return 0;
}
あとがき
今回はmaxを使ってスマートに答えを求めましたが、もちろんif文を使って
if(A>10) ans+=A-10;
と計算して大丈夫です。コンテスト中は速くバグなく書くことがなによりも重要です。自分が得意な書き方で解きましょう。私はこの書き方で解きましたよ。
ただコンテスト後はこんな解き方もあるのかー、と別解を眺めてみると思わぬ発見があるかもしれませんね。
この記事が気に入ったらサポートをしてみませんか?