68pts 求调
查看原帖
68pts 求调
877691
MorLeaves楼主2024/3/10 19:52
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
typedef long long ll;
using namespace std;
int T,n,k,a[300005];
struct node {
	ll m,d;
}ans[20005];
bool cmp(node a,node b) {
	if (a.m==b.m) return a.d<b.d;
	return a.m<b.m;
}
ll read() {
    ll x=0,f=1;
	char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) {
		if (ch=='-') f=-1;
	}
    for(;isdigit(ch);ch=getchar()) {
		x=x*10+ch-'0';
	}
    return x*f;
}
int main() {
	T=read();
	while(T--) {
		scanf("%d %d",&n,&k);
		ll t=k;
		int sum=0;
		for(int i=1;i<=n;i++) a[i]=read();
		if (k==1) {
			printf("0\n");
			continue;
		}
		while(t<=1e16) {
			if (t<=10) {
				t*=k;
				continue;
			}
			ll s=t;
			int cnt=0;
			while(s!=0) {
				cnt++;
				s/=10;
			}
			for(int i=cnt;i>=2;i--) {
				ll x=t/ll(pow(10,i-1)),y=t%ll(pow(10,i-1));
				if (y<pow(10,i-2))  continue;
				if (x>n) break;
				if (y<=a[x]) {
					sum++;
					ans[sum]={x,y};
				}
			}
			t*=k;
		}
		printf("%d\n",sum);
		sort(ans+1,ans+sum+1,cmp);
		for(int i=1;i<=sum;i++) {
			printf("%lld %lld\n",ans[i].m,ans[i].d);
			ans[i].m=0;
			ans[i].d=0;
		}
	}
	return 0;
}
2024/3/10 19:52
加载中...