cf1083 B. The Fair Nut and Strings(思维)

题意:

k个长为n的字符串(未知),只由字母a和b组成,且字典序均介于串A和串B之间。问集合 \(S=\{ p:p为至少一个串的前缀 \}\) 最大能是多少。

思路:

想象一棵trie,若无字典序限制则每层的节点数是上一层的2倍。考虑字典序,则只有两种边界情况非法。

每层最多能取k个

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
long long n, k, res, ans, M = 1e9;
char a[N], b[N];
signed main()
{
    scanf("%lld%lld%s%s", &n, &k, a + 1, b + 1);

    res = 1;
    for(int i = 1; i <= n; i++)
    {
        res *= 2;
        res -= a[i]=='b';
        res -= b[i]=='a';
        res = min(M, res);
        ans += min(k, res);
    }

    printf("%lld", ans);

    return 0;
}

posted @ 2022-01-06 12:11  Bellala  阅读(36)  评论(0)    收藏  举报