h_nosonの日記

競プロ、CTFなど

Codeforces Round #349 (Div. 2) A. Pouring Rain

問題
Problem - A - Codeforces
直径dcmの円筒があり,初めに高さhcmだけ水が入っている.
毎秒vmlで水を飲み,また雨によって毎秒ecmだけ水かさが増すとき,
水を飲みきれるか,飲みきれるとしたら何秒かかるか.

解法
vt = \pi\left(\frac{d}{2}\right)^2h+\pi\left(\frac{d}{2}\right)^2etが成り立つので
4v>\pi d^2eならば飲みきれ,
\frac{\pi d^2h}{4v-\pi d^2e}が答えになる.

ソースコード

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

#define RREP(i,s,e) for (i = s; i >= e; i--)
#define rrep(i,n) RREP(i,n-1,0)
#define REP(i,s,e) for (i = s; i < e; i++)
#define rep(i,n) REP(i,0,n)
#define INF 100000000

typedef long long ll;

int main() {
    int d, h, v, e;
    double pi = acos(-1);
    cin >> d >> h >> v >> e;
    if (4*v > pi*d*d*e) {
        cout << "YES" << endl;
        cout << fixed << setprecision(5) << (pi*d*d*h)/(4*v-pi*d*d*e) << endl;
    }
    else
        cout << "NO" << endl;
    return 0;
}