HDU 4473 Exam 有点技巧的暴力枚举 (2012成都区域赛J题)
2015-03-28 22:49
453 查看
题目大意:
就是现在定义f(x)表示满足x mod (a*b) == 0的有序正整数对(a, b)的数量, 对于给定的n, 求 f(1) + f(2) + ... + f(n)的值, (1 <= n <= 10^11)
大致思路:
首先这个题可以转换一下思路, f(1) + f(2) + ... + f(n)实际上就是满足 a*b*c <= n的不同有序数对(a, b, c)的数量
那么不妨设 a <= b <= c显然 a <= n^(1/3)
那么可以暴力枚举a的值, 然后对于b满足 a <= b <= (n/a)^(1/2)
所以暴力枚举a和b的值那么此时c的数量为 n/(a*b) - b + 1个 (n/(a*b) >= b)
那么当a = b时, 如果c取b排列有1种, 如果c取 > b这样的c有 n/(a*b) - b此时相当于排列(a, a, c)有3种
当a != b时, 如果c = b此时排列有3种, 如果c取c > b这样的n/(a*b) - b种c, 相当于排列(a, b, c)有6种
所以枚举a, b的值然后判断a和b的关系即可得到此条件下的排列数量
代码如下:
Result : Accepted Memory : 1824 KB Time : 2605 ms
就是现在定义f(x)表示满足x mod (a*b) == 0的有序正整数对(a, b)的数量, 对于给定的n, 求 f(1) + f(2) + ... + f(n)的值, (1 <= n <= 10^11)
大致思路:
首先这个题可以转换一下思路, f(1) + f(2) + ... + f(n)实际上就是满足 a*b*c <= n的不同有序数对(a, b, c)的数量
那么不妨设 a <= b <= c显然 a <= n^(1/3)
那么可以暴力枚举a的值, 然后对于b满足 a <= b <= (n/a)^(1/2)
所以暴力枚举a和b的值那么此时c的数量为 n/(a*b) - b + 1个 (n/(a*b) >= b)
那么当a = b时, 如果c取b排列有1种, 如果c取 > b这样的c有 n/(a*b) - b此时相当于排列(a, a, c)有3种
当a != b时, 如果c = b此时排列有3种, 如果c取c > b这样的n/(a*b) - b种c, 相当于排列(a, b, c)有6种
所以枚举a, b的值然后判断a和b的关系即可得到此条件下的排列数量
代码如下:
Result : Accepted Memory : 1824 KB Time : 2605 ms
/* * Author: Gatevin * Created Time: 2015/3/28 19:56:11 * File Name: Chitoge_Kirisaki.cpp */ #include<iostream> #include<sstream> #include<fstream> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #include<cctype> #include<cmath> #include<ctime> #include<iomanip> using namespace std; const double eps(1e-8); typedef long long lint; lint ans; lint a, b, c; int main() { lint n; int cas = 1; while(scanf("%I64d", &n) != EOF) { ans = 0; for(a = 1; a*a*a <= n; a++) for(b = a; a*b*b <= n; b++) { c = n/(a*b); if(c < b) break; if(a == b) ans += 1LL + (c - b)*3LL; else ans += 3LL + (c - b)*6LL; } printf("Case %d: %I64d\n", cas++, ans); } return 0; }
相关文章推荐
- HDU 4473 Exam 2012成都现场赛J题(规律+思维)
- hdu 4473 Exam (2012ACM成都赛区现场赛J题)
- HDU 4445Crazy Tank 2012金华现场赛D题(暴力枚举)
- hdu 4466 成都2012区域赛C题
- [暴力] HDU 4473 Exam
- HDU 4468 Spy KMP + 贪心 (2012成都区域赛E题)
- HDU 4968 等级估计 暴力枚举技巧的使用
- hdu 4473 Exam 构造枚举
- HDU 4473 HDOJ Exam 2012ACM亚洲赛成都赛区J题
- HDU 4473 Exam 枚举
- [暴力]HDU 4473——Exam
- HDOJ 4473 Exam 暴力枚举
- HDU 4473 Exam 构造枚举
- HDU 4474 Yet Another Multiple Problem【2012成都regional K题】 【BFS+一个判断技巧】
- HDU 4465 Candy 概率 (2012成都区域赛B题)
- hdu_2328_Corporate Identity(暴力枚举子串+KMP)
- hdu 5143 暴力枚举
- HDU 1015 Safecracker (暴力枚举)
- HDU 4081 Qin Shi Huang's National Road System(最小生成树,记录圈中最大边后暴力枚举)
- hdu 6103 暴力枚举+贪心