https://codeforces.ml/contest/1465/problem/E
好题好题 做不来的都是好题[滑稽]
写的太好了555 羡慕这样的博客
https://www.cnblogs.com/dysyn1314/p/14183815.html
图片截取自上述链接
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll n, T; 5 string s; 6 ll cnt[30]; 7 int main(){ 8 cin >> n >> T; 9 cin >> s; 10 11 ll tmp = 0; 12 tmp += (1ll << (s[n - 1] - 'a')); 13 tmp -= (1ll << (s[n - 2] - 'a')); 14 15 for(int i = 0 ; i < n - 2 ; i++){ 16 tmp -= (1ll << (s[i] - 'a')); 17 } 18 for(int i = 0 ; i < n - 2 ; i++){ 19 cnt[s[i] - 'a']++; 20 }//最后两位不计入cnt 21 22 if(T < tmp){ 23 cout << "NO" << endl; 24 return 0; 25 }else{ 26 T -= tmp; 27 } 28 29 for(int i = 25 ; i >= 0 ; i--){ 30 ll p = (1ll << (i + 1));//多移一位,减法到加法 两倍 31 ll k = min(cnt[i], T / p); 32 T -= k * p; 33 } 34 35 if(!T){ 36 cout << "YES" << endl; 37 }else{ 38 cout << "NO" << endl; 39 } 40 41 return 0; 42 }