Codeforces Round 1050 (Div. 4)

链接:https://codeforces.com/contest/2148

A. Sublime Sequence

算法:

    模拟。

思路:

    无。

关键代码:

void miyan()
{
    int x, n;
    cin >> x >> n;

    if (n & 1)
        cout << x << endl;
    else
        cout << 0 << endl;
}

B. Lasers

算法:

    模拟。

思路:

    每条线必然都会被穿过。

关键代码:

void miyan()
{
    ll n, m, x, y;
    cin >> n >> m >> x >> y;

    vector<ll> a(n), b(m);
    for (auto &x : a)
        cin >> x;
    for (auto &x : b)
        cin >> x;

    cout << n + m << endl;
}

C. Pacer

算法:

    贪心。

思路:

    无。

关键代码:

void miyan()
{
    ll n, m;
    cin >> n >> m;

    vector<pii> a(n + 1);
    for (int i = 1; i <= n; ++i)
        cin >> a[i].first >> a[i].second;

    ll last = 0, op = 0;
    ll ans = 0;
    for (int i = 1; i <= n; ++i)
    {
        auto [x, y] = a[i];

        ll cnt = x - last;
        ll now = (op + cnt) % 2;

        ans += cnt;

        if (now != y)
            --ans;

        last = x;
        op = y;
    }

    if (a[n].first != m)
        ans += m - a[n].first;

    cout << ans << endl;
}

D. Destruction of the Dandelion Fields

算法:

    贪心。

思路:

    奇数才会切换状态。

    先到一个最大的奇数换成启动状态,切掉所有的偶数,然后交替切掉奇数,小奇数关,大奇数开。

关键代码:

void miyan()
{
    int n;
    cin >> n;
    vector<ll> a(n);
    for (auto &x : a)
        cin >> x;

    vector<ll> odd, even;
    odd.reserve(n), even.reserve(n);
    for (int i = 0; i < n; ++i)
    {
        if (a[i] & 1)
            odd.push_back(a[i]);
        else
            even.push_back(a[i]);
    }

    ranges::sort(odd, greater<>());
    ranges::sort(even);

    if (odd.empty())
        cout
            << 0 << endl;
    else if (even.size())
    {
        ll ans = accumulate(all(even), 0ll) + odd.front();

        for (int i = 1; i < (odd.size() + 1) / 2; ++i)
            ans += odd[i];

        cout << ans << endl;
    }
    else
    {
        ll ans = 0;

        for (int i = 0; i < (odd.size() + 1) / 2; ++i)
            ans += odd[i];

        cout << ans << endl;
    }
}

E. Split

算法:

    贪心。

思路:

    可以发现如果数组中每个元素的个数都是 \(k\) 的倍数,那么必然就存在卓越子数组。

    如果一个子数组中每个元素的个数都小于整体个数 \(/ k\),那么这个子数组就成立。

关键代码:

void miyan()
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (auto &x : a)
        cin >> x;

    map<int, int> m;
    for (auto x : a)
        ++m[x];

    for (auto &[_, x] : m)
    {
        if (x % k)
        {
            cout << 0 << endl;
            return;
        }

        x /= k;
    }

    ll ans = 0;
    map<int, int> cnt;
    for (int l = 0, r = 0; r < n; ++r)
    {
        ++cnt[a[r]];

        while (cnt[a[r]] > m[a[r]])
            --cnt[a[l++]];

        ans += r - l + 1;
    }

    cout << ans << endl;
}

F. Gravity Falls

算法:

    模拟,排序,贪心。

思路:

    每次将所有数组排序,取开头字典序最小的数组 \(a\) 放到答案里面,然后每个数组都截去前 \(len(a)\) 个元素,循环往复,循环到最后全部数组都为空即可。

关键代码:

void miyan()
{
    int n;
    cin >> n;

    vector<vector<int>> a(n);

    ll len = 0;
    for (int i = 0; i < n; ++i)
    {
        ll k;
        cin >> k;

        a[i].resize(k);
        len = max(len, k);

        for (int j = 0; j < k; ++j)
            cin >> a[i][j];
    }

    vector<int> ans;
    ans.reserve(len);

    ll pos = 0;
    while (pos < len)
    {
        ranges::sort(a);

        for (int i = 0; i < a[0].size(); ++i)
            ans.push_back(a[0][i]);

        pos += a[0].size();

        ll k = a[0].size();

        vector<vector<int>> b;
        b.reserve(n);

        for (int i = 0; i < n; ++i)
        {
            if (a[i].size() > k)
            {
                vector<int> c;
                c.reserve(len - k);

                for (int j = k; j < a[i].size(); ++j)
                    c.push_back(a[i][j]);

                b.push_back(c);
            }
        }

        a = b;
        n = a.size();
    }

    for (auto x : ans)
        cout << x << ' ';
    cout << endl;
}

G. Farmer John’s Last Wish

    还没补。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇