AtCoder Beginner Contest 165

比赛链接: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";
}

猜你喜欢

转载自www.cnblogs.com/Kanoon/p/12820004.html