https://codeforces.com/contest/1464/problem/C
这个规律也没推出来,知道最后两个是固定符号,前面随便选就是水题了
代码学习自roundgod
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxl=3e5+10;
int n,m,k,cnt,tot,cas,ans;ll x;
int a[maxl],num[maxl],ned[maxl];
bool vis[maxl];
char s[maxl];
inline void prework()
{
scanf("%d%lld",&n,&x);
scanf("%s",s+1);
x-=1ll<<(s[n]-'a');
}
inline void mainwork()
{
for(int i=1;i<n;i++)
x+=1ll<<(s[i]-'a');
ans=0;
if(x<0)
return;
for(int i=1;i<=n-2;i++)
num[s[i]-'a'+1]++;
for(int i=60;i>=0;i--)
if(x&(1ll<<i))
ned[i]=1;
for(int i=60;i>=0;i--)
{
if(ned[i]&&num[i]) ned[i]-=min(ned[i],num[i]);
if(i>0)
ned[i-1]+=2*ned[i];
}
if(!ned[0])
ans=1;
}
inline void print()
{
puts(ans?"Yes":"No");
}
int main()
{
int t=1;
//scanf("%d",&t);
for(cas=1;cas<=t;cas++)
{
prework();
mainwork();
print();
}
return 0;
}