2025牛客寒假算法基础集训营3

A 智乃的博弈游戏

智乃的博弈游戏
这个题目给我们的 n 是 1e18 ,通过玩样例得知,这个是一个很经典的奇偶博弈问题。

int x; cin >> x;
    if (x & 1) cout << "Yes";
    else cout << "No";

B智乃的Notepad(Easy version)

我们可以对序列进行排序,我们要保证最长的一个序列在最后。那们最后的那个最长的序列一定是不用删除的,可以留在电脑屏幕上。所以我们求一下 lcp 然后每一次都是计算一个全部打出来字母的个数然后全部删除字母的个数。然后减去 2 * lcp。这就是这个题的正解。至于说中间字符的顺序实际上其实不是很重要,我们只要保证最后一个是最长的就行了。

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

constexpr int N = 1e5 + 10;
string s[N];

int lcp(string a, string b)
{
    int i = 0;
    while (i < a.size() && i < b.size() && a[i] == b[i])
        i++;
    return i;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> m;
    int mmax = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> s[i];
        mmax = max(mmax, int(s[i].size()));
    }s + 1, s + 1 + n);
    int
    sort( ans = 0;
    while (m--)
    {
        int l, r;
        cin >> l >> r;
        for (int i = 1; i <= n; i++)
        {
            ans += 2 * s[i].size(); 
            if (i != 1)
            {
                ans -= lcp(s[i], s[i - 1]) * 2;
            }
        }
        cout << ans - mmax << "\n";
    }
    return 0;
}

F 智乃的捉迷藏

智乃的捉迷藏
这个题目我们可以考虑一个最极端的情况,就是考虑所有人站在三角形的三个角上。这种情况下就是最大的情况。最小的情况就是没有 n 个这种情况了。

void solve()
{
    int n, a, b, c; cin >> n >> a >> b >> c;
    if (a + b + c >= n && a + b + c <= n * 2)
    cout << "Yes" << "\n";
    else cout << "No" << "\n";
}

M 智乃的牛题

对所有的字符串进行排序,然后直接作比较即可。

    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string mo = "nowcoder";
    sort(mo.begin(), mo.end());
    string s; cin >> s;
    sort(s.begin(), s.end());
    if (s == mo) cout << "happy new year";
    else cout << "I AK IOI";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值