rt。
感觉不是讨论区、题解里提到的问题。
代码看似很长,但逻辑比较清晰。
#include<bits/stdc++.h>
using namespace std;
int l,r,L,R,k;
inline int to_10(int base,string num){
int res=0,tmp=1;
for(int i=num.size()-1;i>=0;--i){
res+=num[i]*tmp;
tmp*=base;
}
return res;
}
inline string to_base(int num,int target){
string res{};
while(num){
res.push_back(num%target);
num/=target;
}
reverse(res.begin(),res.end());
return res;
}
inline bool is_tilde(string s){
if(s.size()<=2) return 1;
char s0=s[0],s1=s[1];
if(s0==s1) return 0;
for(int i=0;i<(int)s.size();++i){
if(i&1){
if(s[i]!=s1) return 0;
}
else if(s[i]!=s0) return 0;
}
return 1;
}
bool ans[10000005];
int main(){
ios::sync_with_stdio(0);
cin>>l>>r>>L>>R>>k;
for(int base=l;base<=r;++base){
for(int a1=1;a1<base;++a1){
for(int a2=0;a2<base;++a2){
if(a1==a2) continue;
string num{};
for(int depth=1;;++depth){
num.push_back(depth&1?a1:a2);
//此处得到一个 base 进制下的波浪数
int num10=to_10(base,num);
if(num10>R) break;
if(num10<L) continue;
int cnt=0;
for(int base2=l;base2<=r;++base2){
if(is_tilde(to_base(num10,base2))) ++cnt;
}
if(cnt==k) ans[num10]=1;
}
}
}
}
for(int i=L;i<=R;++i){
if(ans[i]) cout<<i<<endl;
}
return 0;
}