Codeforces Round 1077 (Div. 2)

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

A. Divisible Permutation

算法:

构造。

思路:

打表找规律。

关键代码:

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

    if (n & 1)
    {
        for (int i = n / 2 + 1; i >= 1; --i)
        {
            if (i > 1)
                cout << i << ' ' << n + 2 - i << ' ';
            else
                cout << 1 << ' ';
        }
    }
    else
    {
        for (int i = n / 2 + 1; i <= n; ++i)
            cout << i << ' ' << n + 1 - i << ' ';
    }
    cout << endl;
}

B. Seats

算法:

贪心,分块计数。

思路:

根据 \(1\) 对字符串进行分块,计算每块最小放置 \(1\) 的个数。

关键代码:

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

    int ans = 0;
    int cnt = 0;
    bool ok = 0;
    for (int i = 0; i < n; ++i)
    {
        if (s[i] - '0')
        {
            ans += (cnt + 1 - ok) / 3;
            ok = 1;
            cnt = 0;
        }
        else
            ++cnt;
    }

    if (cnt && ok)
        ans += (cnt + 1) / 3;
    else if (cnt)
        ans += (cnt + 2) / 3;

    cout << ans + ranges::count(s, '1') << endl;
}

C. Restricted Sorting

算法:

贪心,二分。

思路:

显然当数组已经是按非降序排序时,答案为 \(-1\)。

定义 \(a\) 数组为原数组,\(b\) 数组为按非降序排序的 \(a\) 数组。

考虑二分答案,如果 \(a_i\) 和 \(b_i\) 的差的绝对值小于 \(mid\) 则直接交换,否则找一个中间锚点,作为 \(a_i\) 与 \(b_i\) 交换的中间节点,显然这个中间锚点选择数组最大值或最小值,判断 \(a_i\) 与锚点的差的绝对值是否大于等于 \(mid\) 即可。

关键代码:

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

    auto b = a;
    ranges::sort(b);

    if (a == b)
    {
        cout << -1 << endl;
        return;
    }

    ll maxx = ranges::max(a);
    ll minn = ranges::min(a);

    auto check = [&](ll x) -> bool
    {
        for (int i = 0; i < n; ++i)
        {
            if (a[i] == b[i] || abs(a[i] - b[i]) >= x || abs(a[i] - maxx) >= x || abs(a[i] - minn) >= x)
                continue;

            return 0;
        }

        return 1;
    };

    ll l = 1, r = 2e9;
    while (l < r)
    {
        ll mid = l + r + 1 >> 1;
        if (check(mid))
            l = mid;
        else
            r = mid - 1;
    }

    cout << l << endl;
}

D. Shortest Statement Ever

还没补。

暂无评论

发送评论 编辑评论


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