[复杂度分析]HDU4473 Exam 题解

题目大意

定义f(x)=a=1+b=1+[abx]f(x)=\sum_{a=1}^{+\infty}\sum_{b=1}^{+\infty}[ab|x],求i=1nf(i)\sum_{i=1}^nf(i)n1011n\le10^{11}

解题分析

嗯……转化一道就是求abcnabc\le n的组数,然后……玄学枚举一下?

先枚举最小的a,然后枚举较大的b,统计最大的c个数,然后排列组合,分类讨论了解一下?

时间复杂度O(n23)O(n^{\frac{2}{3}}),诡异……

示例代码

题目传送门

#include<cstdio>
using namespace std;
typedef long long LL;
LL n; int tst;
LL _work(LL n){
	LL ans=0;
	for (LL a=1;a*a*a<=n;a++)
		for (LL b=a;a*b*b<=n;b++){
			LL c=n/(a*b); if (c<b) break;
			if (a==b) ans+=(c-b)*3+1; else ans+=(c-b)*6+3;
		}
	return ans;
}
int main()
{
	freopen("exam.in","r",stdin);
	freopen("exam.out","w",stdout); tst=0;
	while (scanf("%lld",&n)==1) printf("Case %d: %lld\n",++tst,_work(n));
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章