RT 后面样例WA
码风不太好,见谅
#include <bits/stdc++.h>
using namespace std;
long long a[300005], st[1001], d[1001], m[1001];
long long n, d1, d2, ds;
long long t;
long long mx, k, date, month, kk, i, j, q, p;
long long countdigit(long long a1) {
p = 0;
while (a1 != 0) {
a1 /= 10;
p++;
}
return p;
}
void division(long long s) {
p = 1;
while (s != 0) {
st[p] = s % 10;
s /= 10;
p++;
}
}
void dmsort(long long cnt) {
long long minn;
for (i = 1; i <= cnt; i++) {
minn = i;
for (j = i + 1; j <= cnt; j++) {
if (m[j] < m[minn]) {
minn = j;
} else if (m[j] == m[minn]) {
if (d[j] < m[minn]) {
minn = j;
}
}
}
swap(m[i], m[minn]);
swap(d[i], d[minn]);
}
}
int main() {
cin >> t;
for (kk = 1; kk <= t; kk++) {
cin >> n >> k;
long long ans = 0;
memset(m, 0, sizeof m);
memset(d, 0, sizeof d);
d1 = countdigit(n); //月最长数位
d2 = 0; //日最长数位
for (i = 1; i <= n; i++) {
cin >> a[i];
d2 = max(d2, countdigit(a[i]));
}
ds = d2 + d1;
if (k != 1) {
for (q = k; q <= pow(10, ds + 1); q *= k) {
date = 0, month = 0;
memset(st, 0, sizeof st);
mx = countdigit(q);
division(q);
for (j = 1; j <= min(d1, mx); j++) { //枚举
date = 0, month = 0;
for (i = mx; i > mx - j; i--) {
month = month * 10 + st[i];
}
if (st[mx - j] == 0)
continue;
for (i = mx - j; i >= 1; i--) {
date = date * 10 + st[i];
}
if (month <= n) {
if (date <= a[month] && date >= 1) {
ans++;
d[ans] = date;
m[ans] = month;
}
}
}
}
if (!ans)
cout << 0 << endl;
else {
cout << ans << endl;
dmsort(ans);
for (i = 1; i <= ans; i++) {
cout << m[i] << " " << d[i] << endl;
}
}
} else
cout << "0" << endl;
}
return 0;
}