1 条题解
-
0
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
- 上传者