专栏文章

题解:B4371 [GXPC-S 2025] 序列 / sequence

B4371题解参与者 2已保存评论 6

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
6 条
当前快照
1 份
快照标识符
@miop98cl
此快照首次捕获于
2025/12/02 22:55
3 个月前
此快照最后确认于
2025/12/02 22:55
3 个月前
查看原文

题意

让一个序列中包含 nn11mm00,使得/这个序列的每个子序列中/ 1100 的数量的差/的最大值/为 kk(多么精妙的断句)。记住,要输出字典序最小的。如果你是因为没看懂题意来看题解的话,请在评论区发一个 1 再回去写,也可以点个赞。

思路

这里要输出字典序最小的,于是我们很容易想到,尽量放 00,如果实在放不了了再放 11
那么什么时候是放不了的呢?第一种是没有 00 了,我们可以每放一个 00mm 就减一,如果 mm 等于 00 就放不了了。第二种我们可以用 xx 记录下当前最大的 KK(题目里这样叫的,见题目描述第二段开头),如果 xx 小于 kk(这个是输入时的 kk,见输入格式),那么就可以放进去一个 11xx 也要加一。
其他具体细节见代码,这里不再赘述。

代码

CPP
#include <bits/stdc++.h>
#define code using
#define from namespace
#define Yxa_Sheep std
code from Yxa_Sheep;
int n, m, k, x;
string ans;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n >> m >> k;
    while (n || m)
    {
        if (m && x < k)
            ans += '0', x++, m--;
        else
            ans += '1', x--, n--;
    }
    cout << ans;
    return 0;
}
题解来之不易,且看且珍惜。给个赞再走吧。

评论

6 条评论,欢迎与作者交流。

正在加载评论...