如果可以的话求hack,样例已过
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 1e2;
int a,b,T,p[10] = {0,1,10,100,1000,10000,100000,1000000,10000000};
short int g[N];
bool vis[N];
queue <int> q;
inline void read(int &x) {
x = 0;
char s = getchar();
while(s < '0' || s > '9') s = getchar();
while(s >= '0' && s <= '9') {
x = x * 10 + s - 48;
s = getchar();
}
return;
}
inline long long query(int x) {
int k,gg = g[x];
long long ans = 0;
for(int i = 2;i <= gg;i ++) {
k = p[i];
int c = x % k;
int l = x / k + p[g[x / k] + 1] * c;//变化后的数
if(l > x && l <= b && !vis[l]) ans ++,vis[l] = 1,q.push(l);
}
while(!q.empty()) {
vis[q.front()] = 0;
q.pop();
}
return ans;
}
int main() {
read(T);
g[1] = g[2] = g[3] = g[4] = g[5] = g[6] = g[7] = g[8] = g[9] = 1;
for(int i = 10;i <= 1e6;i ++) g[i] = g[i / 10] + 1;
for(int t = 1;t <= T;t ++) {
read(a),read(b);
long long ans = 0;
for(int i = max(a,10);i <= b;i ++) ans += query(i);
printf("Case #%d: %lld\n",t,ans);
}
return 0;
}