社区讨论
求调,判重后答案貌似变少了
P13313 [GCJ 2012 Qualification] Recycled Numbers参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mde46axd
- 此快照首次捕获于
- 2025/07/22 13:48 8 个月前
- 此快照最后确认于
- 2025/11/04 03:57 4 个月前
如果可以的话求hack,样例已过
CPP#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;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...