re了半个小时,望周知记得开__int128
查看原帖
re了半个小时,望周知记得开__int128
619201
Mystical12楼主2024/3/16 14:58
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
using i64 = int64_t;
void solve();
int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);
	//solve();
	int t=1;
	cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}
void solve() {
	i64 n,k;cin>>n>>k;
	vector<i64>a(n+1);
	vector<pair<i64,i64> >v;
	map<i64,i64>mp;
	for(int i=1; i<=n; i+=1)cin>>a[i];
	__int128 ans = 1;
	for(int i=1; ans*k<=(i64)1e18; i+=1) {
		ans *= k;
		mp[ans] += 1;
		if(i>1e6)break;
	}
	for(auto [k,vv] : mp) {
		string s = to_string(k);
		for(int i=0; i<=s.size(); i+=1) {
			i64 fa = 0,ba = 0;
			if(s[0] == '0')continue;
			for(int j = 0; j < i && j < s.size(); j += 1)fa = fa * 10 + (s[j] - '0');
			
			if(s[i] == '0')continue;
			for(int j = i; j < s.size(); j += 1)ba = ba * 10 + (s[j] - '0');
			
			//cout<<k<<" "<<fa<<" "<<ba<<endl;
			if(fa && ba && fa <= n && ba <= a[fa])v.push_back({fa,ba});
		}
	}
	sort(v.begin(),v.end(),[&](pair<i64,i64>a,pair<i64,i64>b) {
		return a.first == b.first ? a.second < b.second : a.first < b.first;
	});
	cout<<v.size()<<'\n';
	for(auto e : v)cout<<e.first<<" "<<e.second<<'\n';
}

2024/3/16 14:58
加载中...