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;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号