AtCoder Regular Contest 052 に参加しました。
結果は、1 完 (A 問題)、2 WA、 279 位 / 379 人*1でした。
A
解説通り。
また言語選択を忘れてしまい、2 WA してしまった。 前回もやったミスなので気を付けないと…。
#include <iostream> #include <string> using namespace std; int main() { string id; cin >> id; for (auto c : id) { if ('0' <= c && c <= '9') cout << c; } cout << endl; return 0; }
B
- 円錐の中心が 軸上に来るものだと思い込んでいた。
- いずれか 1 つの円錐の部分の体積を求めるのだと誤読してしまった。
体積を求めるところは合っていたので、解説を聞いてすぐに AC しました。
解法
与えられる円錐の高さが整数なので、各円錐について、高さ 1 ずつ輪切りにする感じで体積を求めて、足し合わせた。
#include <iostream> #include <vector> #include <cmath> #include <cstdio> using namespace std; double v[20000]; int main() { int N, Q; cin >> N >> Q; for (int i = 0; i < N; ++i) { int x, r, h; cin >> x >> r >> h; for (int j = 0; j < h; ++j) { double h1 = h - j, r1 = h1 * r / h; double h2 = h - j - 1.0, r2 = h2 * r / h; v[x + j] += M_PI * (r1 * r1 * h1 - r2 * r2 * h2) / 3.0; } } for (int i = 0; i < Q; ++i) { int a, b; cin >> a >> b; bool f = false; double V = 0; for (int j = a; j < b; ++j) { V += v[j]; } printf("%.6f\n", V); } return 0; }
このあと 25 時からの Google Code Jam 2016 Round 1B にも出る予定です。
*1:(最下位(380 位) − 1) 人