社区讨论

求调,判重后答案貌似变少了

P13313 [GCJ 2012 Qualification] Recycled Numbers参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mde46axd
此快照首次捕获于
2025/07/22 13:48
8 个月前
此快照最后确认于
2025/11/04 03:57
4 个月前
查看原帖
我竟然连黄题都做不出来 :(
GCJ什么逆天题目
如果可以的话求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 条回复,欢迎继续交流。

正在加载回复...