はじめに
たなしょです。
今回は答えがわからずこちらのブログを参考にさせていただきました。
やっぱり難しいですね。。。。
問題文
一列に並んだ N 本の林檎の木のうちいずれかに黄金の林檎が実ると言われています。
そこで、何人かの監視員を配置してどの林檎の木もいずれかの監視員に監視された状態にしたいです。
それぞれの監視員は N 本の木のうちいずれかに配置します。便宜上、これらの木に 1 から N までの番号をつけます。番号 i の木に配置された監視員は、番号が i − D 以上 i + D 以下のすべての林檎の木を監視します。
条件を満たすために少なくとも何人の監視員を配置する必要があるか求めてください。
制約
入力は全て整数である。
1≤N≤20
1≤D≤20
考え方
一人がカバーできる範囲は2*D+1なのでその値をNで割って、切り上げをしてあげる。
いざ実装
#include <iostream> #include <cmath> using namespace std; int main() { int N, M; cin >> N >> M; cout << ceil(N/(2*M+1.0)) << endl; return 0; }
最後に
B問題が解けませんでした。 まだまだ勉強不足ですね。
ceilで切り上げることができるということもわからなかったのでそもそもC++の勉強不足かなとも思いました。(特にSTL) もっと精進します。
最後まで読んでいただいてありがとうございました。 もしよろしければtwitterアカウント(@piklus100yen)もフォローしていただけると幸いです!