给定两个变换:
- A: n→⌊n/4⌋
- B: n→8n+1
现从 0 开始,不断执行变换 A 或变换 B,执行了 m 次变换后,产生的 m 个数字中有多少个不大于 K 的不同的数字?
输入格式:
输入第一行给出 2 个正整数 m(3≤m≤104)和 K(103<K<105),随后一行给出 m 个仅由 A、B 组成的字母,表示变换类型。
题目保证变换产生的每个数字都不超过 231。
输出格式:
在一行中输出按输入顺序执行了 m 次变换后,题面中要求的数字的个数。
输入样例:
13 2022
BBBBBBAAAAAAA
输出样例:
7
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,k,y=0,z=0;string s;
map<int,int>a;
cin>>m>>k;
getchar();
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='A') y=y/4;
else y=y*8+1;
if(y<=k&&a[y]==0){z++;a[y]=1;}
}
cout<<z;
return 0;
}