1 条题解

  • 0
    @ 2026-9-30 12:32:52

    C++ :

    
    /* 统计回文三元组 (x<y<z, 均 >=100, x+y+z<=n) 的个数;回文数不足 1500 个,双指针 O(P^2) */
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    long long P[20005];
    int m = 0;
    int main(){
        long long n;
        if(scanf("%lld", &n) != 1) return 0;
        for(int L = 1; L <= 8; L++){
            int h = (L + 1) / 2;
            long long lo = 1, hi;
            for(int t = 0; t < h - 1; t++) lo *= 10;
            hi = lo * 10;
            for(long long pre = lo; pre < hi; pre++){
                long long x = pre, suf = (L % 2 == 0) ? pre : pre / 10;
                while(suf){ x = x * 10 + suf % 10; suf /= 10; }
                if(x >= 100 && x <= n && m < 20000) P[m++] = x;
            }
        }
        sort(P, P + m);
        long long ans = 0;
        for(int i = 0; i < m; i++){
            int k = m - 1;
            for(int j = i + 1; j < m; j++){
                while(k > j && P[i] + P[j] + P[k] > n) k--;
                if(k <= j) break;
                ans += k - j;
            }
        }
        printf("%lld\n", ans);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2574
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者