問題
①鹿の数と、落ちている角の数が与えられる。
例) 鹿3匹、角2本
②鹿は角が0~2本である。
③このとき、角が2本ある鹿の数の最小値と最大値を求める。
関数
vector<int >が返り値なのでこれが使えれば。
vector <int> a;
a.push_back(b);でbを挿入できます。
考え方
最小値
鹿1匹につき角が1本落ちている場合なので
「鹿の数ー角の数」。
最大値
鹿1匹につき角が2本落ちている場合。
「鹿の数ー角の数/2」だが、
整数の計算なので奇数の場合と偶数の場合で結果が異なってしまうので整理。
鹿3匹、角1本 ~ 3-(1+1)/2=2匹
鹿3匹、角2本 ~ 3-(2+1)/2=2匹
鹿3匹、角3本 ~ 3-(3+1)/2=1匹
となるので、
「鹿の数ー(角の数+1)/2」が最大値。
vector<int> getminmax(int N, int K) {
vector<int> ans(2);
ans.push_back(N-K);
ans.push_back(N-(K+1)/2);
return ans;
}
①鹿の数と、落ちている角の数が与えられる。
例) 鹿3匹、角2本
②鹿は角が0~2本である。
③このとき、角が2本ある鹿の数の最小値と最大値を求める。
関数
vector<int >が返り値なのでこれが使えれば。
vector <int> a;
a.push_back(b);でbを挿入できます。
考え方
最小値
鹿1匹につき角が1本落ちている場合なので
「鹿の数ー角の数」。
最大値
鹿1匹につき角が2本落ちている場合。
「鹿の数ー角の数/2」だが、
整数の計算なので奇数の場合と偶数の場合で結果が異なってしまうので整理。
鹿3匹、角1本 ~ 3-(1+1)/2=2匹
鹿3匹、角2本 ~ 3-(2+1)/2=2匹
鹿3匹、角3本 ~ 3-(3+1)/2=1匹
となるので、
「鹿の数ー(角の数+1)/2」が最大値。
vector<int> getminmax(int N, int K) {
vector<int> ans(2);
ans.push_back(N-K);
ans.push_back(N-(K+1)/2);
return ans;
}