比赛链接:https://atcoder.jp/contests/abc165/tasks
A - We Love Golf
题意
区间 $[a, b]$ 中是否存在 $k$ 的倍数。
代码
#include <bits/stdc++.h> using namespace std; int main() { int k, a, b; cin >> k >> a >> b; for (int i = a; i <= b; i++) { if (i % k == 0) { cout << "OK"; return 0; } } cout << "NG"; }
B - 1%
题意
一开始在银行存有 $100$ 元,年利率为 $\lfloor \frac{n}{100} \rfloor$,问多少年后存款不少于 $x$ 元。
代码
#include <bits/stdc++.h> using namespace std; int main() { long long x; cin >> x; long long sum = 100; for (int i = 1; i < INT_MAX; i++) { sum += sum / 100; if (sum >= x) { cout << i << "\n"; return 0; } } }
C - Many Requirements
题意
构造一个长为 $n$ 的数组 $A$,其中 $1 ≤ A_1 ≤ A_2 ≤ ... ≤ A_n ≤ m$。
另有数组 $a,b,c,d$,如果 $A_{b_i} - A_{a_i} = c_i$,则该数组的价值加上 $d_i$ ,求能构造出的数组的最大价值。
题解
枚举所有情况即可。(话说为什么没有超时)
代码
#include <bits/stdc++.h> using namespace std; int n, m, q; int a[50], b[50], c[50], d[50]; int A[10], ans; void dfs(int dep, int pre) { if (dep == n) { int sum = 0; for (int i = 0; i < q; i++) if (A[b[i] - 1] - A[a[i] - 1] == c[i]) sum += d[i]; ans = max(ans, sum); return; } for (int i = pre; i <= m; i++) { A[dep] = i; dfs(dep + 1, i); } } int main() { cin >> n >> m >> q; for (int i = 0; i < q; i++) cin >> a[i] >> b[i] >> c[i] >> d[i]; dfs(0, 1); cout << ans << "\n"; }