AtCoder Beginner Contest 433

链接:https://atcoder.jp/contests/abc433

A – Happy Birthday! 4

算法:

    模拟。

思路:

    无。

关键代码:

void miyan()
{
    int x, y, z;
    cin >> x >> y >> z;

    if (x <= y)
    {
        cout << "No" << endl;
        return;
    }

    for (int i = 0; i <= 10000; ++i)
    {
        if (x + i == (y + i) * z)
        {
            cout << "Yes" << endl;
            return;
        }
    }

    cout << "No" << endl;
}

B – Nearest Taller

算法:

    模拟。

思路:

    无。

关键代码:

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

    for (int i = 0; i < n; ++i)
    {
        bool ok = 0;
        for (int j = i - 1; j >= 0; --j)
        {
            if (a[j] > a[i])
            {
                ok = 1;
                cout << j + 1 << endl;
                break;
            }
        }

        if (!ok)
            cout << -1 << endl;
    }
}

C – 1122 Substring 2

算法:

    贪心。

思路:

    无。

关键代码:

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

    int n = s.size();

    vector<pii> a;
    for (int i = 0, j = 0; i < n; ++i)
    {
        j = i + 1;
        while (j < n && s[j] == s[i])
            ++j;

        a.push_back({s[i] - '0', j - i});

        i = j - 1;
    }

    ll ans = 0;
    for (int i = 0; i < a.size() - 1; ++i)
    {
        if (a[i].first + 1 != a[i + 1].first)
            continue;

        ans += min(a[i].second, a[i + 1].second);
    }

    cout << ans << endl;
}

D – 183183

算法:

    数论。

思路:

\(f(a, b) = a * (10 ^ k) + b, k = b.size()\) \(a * (10 ^ k) + b ≡ 0 (mod m)\) \(b ≡ -a * (10 ^ k) (mod m)\)

关键代码:

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

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

    vector<ll> pow(15, 1);
    for (int i = 1; i <= 10; ++i)
        pow[i] = (pow[i - 1] * 10) % m;

    map<int, vector<ll>> hash;
    for (int i = 0; i < n; ++i)
    {
        int len = to_string(a[i]).size();
        hash[len].push_back(a[i] % m);
    }

    for (auto &[cnt, vec] : hash)
        ranges::sort(vec);

    ll ans = 0;
    for (int i = 0; i < n; ++i)
    {
        for (int k = 1; k <= 10; ++k)
        {
            ll cur = a[i] % m * pow[k] % m;

            cur = (-cur + m) % m;

            int L = ranges::lower_bound(hash[k], cur) - hash[k].begin();
            int R = ranges::upper_bound(hash[k], cur) - hash[k].begin();

            if (R > L)
                ans += R - L;
        }
    }

    cout << ans << endl;
}

E – Max Matrix 2

算法:

    构造。

思路:

    如果在 \(x\) 中存在重复元素答案为 \(No\),\(y\) 同理。

    维护集合 \(set\) 为未在 \(x\),\(y\) 中出现的数字。

    令 \(val = min(x[i], y[j]):\)

  • 如果 \(val\) 既存在于 \(x\) 中,还存在于 \(y\) 中,那么 a[i][j] = val[/latex]
  • 如果 \(val\) 存在于 \(x\) 中,但不存在于 \(y\) 中,说明 \(x[i] < y[j]\),\(val\) 还未被使用的话,可以直接令 \(a[i][j] = val\)
  • 如果 \(val\) 存在于 \(y\) 中,但不存在于 \(x\) 中,说明 \(x[i] > y[j]\),\(val\) 还未被使用的话,可以直接令 \(a[i][j] = val\)
  • 如果 \(val\) 已经被使用了,那么需要填一个小于 \(val\) 的数字 \(x\),在 \(set\) 中贪心选一个最大的 \(x\) 即可。

关键代码:

void miyan()
{
    int n, m;
    cin >> n >> m;
    vector<int> x(n + 1), y(m + 1);
    for (int i = 1; i <= n; ++i)
        cin >> x[i];
    for (int i = 1; i <= m; ++i)
        cin >> y[i];

    vector<int> st(n * m + 1, 0);
    for (int i = 1; i <= n; ++i)
    {
        if (st[x[i]])
        {
            cout << "No" << endl;
            return;
        }
        st[x[i]] = 1;
    }
    ranges::fill(st, 0);
    for (int i = 1; i <= m; ++i)
    {
        if (st[y[i]])
        {
            cout << "No" << endl;
            return;
        }
        st[y[i]] = 1;
    }

    set<int> s;
    for (int i = 1; i <= n * m; ++i)
        s.insert(i);

    for (int i = 1; i <= n; ++i)
        s.erase(x[i]);
    for (int i = 1; i <= m; ++i)
        s.erase(y[i]);

    vector ans(n + 1, vector<int>(m + 1, 0));
    set<int> used;
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            int val = min(x[i], y[j]);

            if (x[i] == y[j])
            {
                if (used.count(val))
                {
                    cout << "No" << endl;
                    return;
                }
                ans[i][j] = val;
                used.insert(val);
            }
        }
    }
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            int val = min(x[i], y[j]);

            if (x[i] != y[j])
            {
                if (!used.count(val))
                {
                    ans[i][j] = val;
                    used.insert(val);
                }
                else
                {
                    auto it = s.upper_bound(val);

                    if (it == s.begin())
                    {
                        cout << "No" << endl;
                        return;
                    }

                    int num = *prev(it);
                    ans[i][j] = num;
                    used.insert(num);
                    s.erase(num);
                }
            }
        }
    }

    cout << "Yes" << endl;
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
            cout << ans[i][j] << ' ';

        cout << endl;
    }
}

F – 1122 Subsequence 2

    还没补。

暂无评论

发送评论 编辑评论


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