D まで解いた. Dはpythonで再帰したら深さがアレでREになったっぽかったのでC++に書き直すか,と思ったら時間切れだった.
しかし,最近出るたびにratingが下がっていく…
A. Red or Not
普通に場合分け
a = int(input()) if a >= 3200: print(input()) else: print("red")
https://atcoder.jp/contests/abc138/submissions/6981216
B. Resistors in Parallel
なんか数学なやつかと思って考え込んでしまったが普通に計算するだけだった.
n = int(input()) a = list(map(int, input().split())) ans = sum([1/x for x in a]) print(1/ans)
https://atcoder.jp/contests/abc138/submissions/6997764
C. Alchemist
ちまちまと試していたら,小さいほうからやるのがよさそうだった(証明ナシ).
n = int(input()) v = sorted(list(map(int, input().split()))) ans = v[0] for i in range(1, n): ans += v[i] ans /= 2 print(ans)
https://atcoder.jp/contests/abc138/submissions/7002940
D. Ki
木を1からたどれば終わり.
#include <algorithm> #include <cmath> #include <cstdio> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <sstream> #include <string> using namespace std; static vector<vector<int>> g; static vector<int> ans; static vector<bool> visited; static vector<int> c; void walk(int e, int cnt) { ans[e] = cnt; visited[e] = true; for (auto i : g[e]) { if (!visited[i]) { walk(i, cnt + c[i]); } } return; } void solve(int n) { ans.resize(n + 1, 0); visited.resize(n + 1, false); walk(1, c[1]); for (int i = 1; i < n; i++) { printf("%d ", ans[i]); } printf("%d\n", ans[n]); } int main() { int n, q; cin >> n >> q; g.resize(n + 1); for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } c.resize(n + 1, 0); for (int i = 0; i < q; i++) { int p, x; cin >> p >> x; c[p] += x; } solve(n); return 0; }