Water Bottle
問題
D – Water Bottle
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2022/01/12 解法は思いつたが、実装できず。
- 水筒の高さの \(\frac{1}{2}\) \(\leq\) 水面の高さのとき
atan2(y,x)
で \(\theta\) を求める。
- 水筒の高さの \(\frac{1}{2}\) \(>\) 水面の高さのとき
atan2(y,x)
で \(90 – \theta\) を求めることできるので、そこから \(90\) 引く。
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<int, int>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; // const ll INF = 1LL << 60; // const int INF = 1001001001; int main() { double a, b, x; cin >> a >> b >> x; double m = a * a; double wh = x / m; double dh = b - wh; double ans = 0.0; if(dh <= wh) { double v = atan2(dh * 2, a); ans = v * 180.0 / M_PI; } else { double h = 2 * a * wh / b; double v = atan2(h, b); ans = v * 180.0 / M_PI; ans = 90.0 - ans; } printf("%.16f", ans); printf("\n"); }