hdu 4473 Exam (2012ACM成都赛区现场赛J题)
来源:互联网 发布:淘宝app历史版本 编辑:程序博客网 时间:2024/04/29 17:07
题意:
定义 f(x) = { num | a*b| x } , 求 \sum { f(x) } , x <= 10^11
思路:
题目等价于求 a*b*c <= n 的数量.
假定 a <= b <= c. 则 a <= n^(1/3) , b <= n^(1/2)
所以我们可以通过枚举 a,b 计算出数量,时间复杂度未 O(n^(2/3))
对于枚举的 a, b, c; 有三种情况
1 . 三个相等 a, a, a 则只需要计算一次 ,
数量为: n^(1/3)
2. 二个相等, a, a, b or a, b, b 则需要计算 C(1,3) = 3 次
数量为: n/(a*a) - a and (n/a)^(1/2) - a
3. 三个都不相等 a, b, c , 则方案数为 P(3,3) = 6 次
数量为: n/(a*b) - b
定义 f(x) = { num | a*b| x } , 求 \sum { f(x) } , x <= 10^11
思路:
题目等价于求 a*b*c <= n 的数量.
假定 a <= b <= c. 则 a <= n^(1/3) , b <= n^(1/2)
所以我们可以通过枚举 a,b 计算出数量,时间复杂度未 O(n^(2/3))
对于枚举的 a, b, c; 有三种情况
1 . 三个相等 a, a, a 则只需要计算一次 ,
数量为: n^(1/3)
2. 二个相等, a, a, b or a, b, b 则需要计算 C(1,3) = 3 次
数量为: n/(a*a) - a and (n/a)^(1/2) - a
3. 三个都不相等 a, b, c , 则方案数为 P(3,3) = 6 次
数量为: n/(a*b) - b
另外要注意的是, 直接用pow(n,m) 求得的值会 四舍五入.要注意 保证 m*m <= n or m*m*m <= n 中最大的m
#include<iostream>#include<cmath>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<algorithm>using namespace std;__int64 n,m,t,ni,ans,i,j,k;__int64 pow3(__int64 a)//比a的立方根小的最大的整数{ __int64 b=pow(a,1.0/3); //cout<<b<<endl; while(b*b*b<a) b++; while(b*b*b>a) b--; return b;}__int64 pow2(__int64 a){ __int64 b=pow(a,0.5); while(b*b<a) b++; while(b*b>a) b--; return b;}int main(){ t=0; while(~scanf("%I64d",&n)) { t++; ans=0; m=pow3(n);//i*j*z<=n 其中i<=j<=z 所以i的最大值是m // cout<<m<<endl; ans+=m;//第一种情况 i*i*i<=n for(i=1;i<=m;i++) { ni=n/i;//第二种情况:1、j*j<=n/i 2、j<=n/i*i k=pow2(ni);//由上式知 i<=j<=k 得到i j的范围 ans+=(ni/i+k-2*i)*3;//上面1、得到ans=k-(i+1)-1、因为j>i(取=就跟第一种情况相同了) 所以j从i+1取到k该等式都成立 同理得2\ans=ni/i-i for(j=i+1;j<=k;j++)//第三种情况 c<=n/(i*j) ans=ni/j-j c取j+1到ni/j再减1(减去跟二重复) ans+=(ni/j-j)*6;//因为假设是i<=j<=c 而题目没有顺序 每种情况重新排列有6种 所以*6 第二种情况*3同理 } printf("Case %I64d: %I64d\n",t,ans); } return 0;}
- hdu 4473 Exam (2012ACM成都赛区现场赛J题)
- HDU 4473 Exam 2012成都现场赛J题(规律+思维)
- HDU 4790 Just Random (2013ACM/ICPC成都赛区现场赛J题)
- HDU 4790 2013 ACM/ICPC 成都赛区现场赛 J. Just Random
- 2012ACM/ICPC成都赛区现场赛A题---Browsing History(hdu4464)
- HDU 4473 Exam 有点技巧的暴力枚举 (2012成都区域赛J题)
- 2011ACM成都赛区现场赛B题 (水题) (SPOJ9935)
- HDU 5536 2015ACM-ICPC长春赛区现场赛J题
- 2014ACM广州赛区现场赛J题题解.
- HDU 4462 Scaring the Birds (2012年杭州赛区现场赛J题)
- hdu 4465 Candy(2012 ACM-ICPC 成都现场赛)
- hdu 4472 Count (2012 ACM-ICPC 成都现场赛)
- HDU-4472-Count (2012 ACM/ICPC成都现场赛)
- 2012ACM/ICPC成都赛区现场赛I题---Count(hdu4472)
- 2012ACM/ICPC成都赛区现场赛K题---Yet Another Multiple Problem(hdu4474)
- hdu 5920 Ugly Problem 2016ACM/CCPC长春赛区现场赛J
- hdu 5919 Sequence II 2016ACM/CCPC长春赛区现场赛J
- 2012 ACM/ICPC 成都赛区网络赛 HDU 4296
- Android canvast View 代码实例
- ARM架构内核启动分析-head.S(1.2、stext分析之准备阶段)
- Android模拟器及其参数介绍
- DBA批量杀进程必杀技
- [激励机制]浅谈内部竞争——如何让你的员工玩命干活?
- hdu 4473 Exam (2012ACM成都赛区现场赛J题)
- ARM架构内核启动分析-head.S(1.3、stext分析之内存临时页表建立)
- C++ 私有继承(总结)
- jquery操作 Dom
- AndroidADB工具使用
- ARM架构内核启动分析-head.S(1.4、stext分析之打开MMU并跳到start kernel)
- matlab2013_Mac安装方法
- javascript 按回车键相应按钮提交事件
- poj 3186 Treats for the Cows(DP)