WA on #5
查看原帖
WA on #5
917775
_buzhidao_楼主2025/6/21 11:50

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;
}
2025/6/21 11:50
加载中...