AtCoder Regular Contest 118 A - Tax Included Price
周期性の回答を実装してみた。
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { int64_t t, N; cin >> t >> N; int64_t ret = 0; int64_t s = 100 + t; int64_t r = 0; int c = 0; vector<bool> temp(s,true); rep(i, 100) { temp[s * i / 100] = false; } r = (N - 1) / t; ret = r * s; c = (N - 1) % t; rep(i, s) { if (temp[i]) { if (!c--) { ret += i; break; } } } cout << ret << endl; }
AtCoder Grand Contest 054 A - Remove Substrings
公式の回答を自分で理解するために実装。
条件分岐?
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { int n; cin >> n; string s; cin >> s; int ret = -1; if (s.front() != s.back()) { ret = 1; cout << ret << endl; return 0; } for (int i = 1; i < n - 1; i++) { if (s[i] != s[0] && s[i + 1] != s[0]) { ret = 2; cout << ret << endl; return 0; } } cout << ret << endl; return 0; }
AtCoder Beginner Contest 204 D - Cooking
tatyamさんの回答を自分で理解するために注記を記入。
DP?すごくきれい
#include <bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; bitset<100001> dp; dp[0] = 1; int sum = 0; while(N--){ int T; cin >> T; sum += T; dp |= dp << T; } cout << dp._Find_next((sum - 1) / 2) << endl; }
AtCoder Beginner Contest 204 C - Tour
公式解説を自分で理解するために注記を記入。
#include<bits/stdc++.h> using namespace std; const int MAX_N = 2000; vector<vector<int>>G; bool temp[MAX_N]; // 到達できたか?フラグ void dfs(int v) { // 深さ優先探索 : dfs if (temp[v])return; // 既に到達したことがあれば return temp[v] = true; // 到達した。 for (auto vv : G[v])dfs(vv); // 到達した所からその子供全部へ dfs } int main() { int N, M; cin >> N >> M; G.resize(N); // 2次元配列 : G にツリー構造生成 for (int i = 0; i < M; i++) { int a, b; cin >> a >> b; G[a - 1].push_back(b - 1); } int ans = 0; // 到達合計 // 全部の要素に対して dfs を行う。 for (int i = 0; i < N; i++) { // 到達できたか?フラグを一度全部クリア for (int j = 0; j < N; j++)temp[j] = false; // dfs実行 dfs(i); // 到達数を集計 for (int j = 0; j < N; j++)if (temp[j])ans++; } cout << ans; }