题意:在所有长度为n,字典序在s和t的,只有'a','b'组成的字符串中,选取k个,然后让他们前缀组成的集合最大。
思路:如果我们把字符二叉树画出来,一个字符串对应根到叶子的一条路径。
我们发现如果某一层的节点数比k小,那么这一层的节点都可以被经过。按照题意处理即可。
#include<bits/stdc++.h> #define maxn 500010 using namespace std; typedef long long LL; LL n,k; char a[maxn],b[maxn]; LL res,ans; int main(){ scanf("%d%d%s%s",&n,&k,a+1,b+1); res = 1; for(int i=1;i<=n;i++){ res*=2; //每一层的节点数 if(a[i]=='b') res--; if(b[i]=='a') res--; if(res>1E9) res=1E9; ans += min(res,k); } cout<<ans<<endl; return 0; }