zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 163

    比赛链接:https://atcoder.jp/contests/abc163/tasks

    A - Circle Pond

    题意

    由半径输出圆周长。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        double r; cin >> r;
        cout << 2 * 3.14 * r;
    }

    B - Homework

    题意

    n 天的假期里要做 m 个任务,最终有多少天假期剩余。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n, m; cin >> n >> m;
        for (int i = 0; i < m; i++) {
            int t; cin >> t;
            n -= t;
        }
        cout << max(-1, n);
    }

    C - management

    题意

    统计 n - 1 个 1~n 的数的个数。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n; cin >> n;
        int cnt[n] = {};
        for (int i = 0; i < n - 1; i++) {
            int t; cin >> t;
            ++cnt[t - 1];
        }
        for (int i : cnt) cout << i << "
    ";
    }

    D - Sum of Large Numbers

    题意

    从 10100+0、10100+1、10100+2、...、10100+n 中选取 k、k+1、k+2、...、n、n + 1 个数,问所有选取情况中有多少不同的值。

    思路

    选 i 个数的值个数 = 选 i 个数的最大值 - 选 i 个数的最小值 + 1。

    f(n) - f(n - i) 是选后 i 个数,即选 i 个数的最大值,

    f(i - 1) 是选前 i 个数,即选 i 个数的最小值,

    ans 初始时为 1 是因为选 n + 1 个数只有一种情况。

    代码

    #include <bits/stdc++.h>
    #define f(n) ((n + 1LL) * (n) / 2)
    using namespace std;
    const int mod = 1e9 + 7;
    int main() {
        int n, k; cin >> n >> k;
        int ans = 1;
        for (int i = k; i <= n; i++) 
            ans = (ans + f(n) - f(n - i) - f(i - 1) + 1) % mod;
        cout << ans;
    }

    E - Active Infants

    题意

    将一个数组重新排序,每个元素的收益为 值 x 变动距离,问排序后的最大收益。 

    思路

    先排序,然后从大到小分配元素。

    dp[i][j] 表示将 i 个元素分配在左边,j 个元素分配在右边的最大收益。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    long long dp[2020][2020];
    int main() {
        int n; cin >> n;
        int a[n]; for (int &i : a) cin >> i;
        int p[n]; iota(p, p + n, 0);
        sort(p, p + n, [&] (int x, int y) {
            return a[x] > a[y];
        });
        for (int i = 0; i < n; i++) {
            for (int j = 0; i + j < n; j++) {
                int k = i + j;
                dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + 1LL * a[p[k]] * abs(p[k] - i));
                dp[i][j + 1] = max(dp[i][j + 1], dp[i][j] + 1LL * a[p[k]] * abs(p[k] - (n - 1 - j)));
            }
        }
        long long ans = 0;
        for (int i = 0; i <= n; i++) 
            ans = max(ans, dp[i][n - i]);
        cout << ans;
    }
  • 相关阅读:
    UVA657 The die is cast(DFS、BFS)
    三分
    【洛谷P6105】iepsmCmq
    【CF613D】Kingdom and its Cities
    【洛谷P4294】游览计划
    【洛谷P3500】TESIntelligence Test
    【洛谷P6189】[NOI Online 入门组] 跑步
    【洛谷P2973】Driving Out the Piggies
    【洛谷P3164】和谐矩阵
    【洛谷P4161】游戏
  • 原文地址:https://www.cnblogs.com/Kanoon/p/12734836.html
Copyright © 2011-2022 走看看