[恢]hdu 2058

2011-12-20 03:18:52

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2058

题意:找[a,b]连续和为m的数串。

枚举a或者枚举b都是会超时的,只能枚举a到b的项数。因为这个数字的范围是1到sqrt(8b)左右,因此不会TLE。

TLE了2次,都是2b错误。第一次直接枚举a,第二次忘了考虑a了,直接枚举了所有的情况- -。

代码:

# include <stdio.h>
# include <math.h>


void output (long long a, long long b)
{
long long n, p ;
for (n = ((long long)sqrt(8*b+1)-1) / 2 ; n >= 1 ; n--)
{
p = (2*b/n - n + 1) / 2 ;
if (p > a) break ;
if ((2*p+n-1)*n == 2*b)
printf ("[%I64d,%I64d]\n", p, p+n-1) ;
}
}


int main ()
{
long long a, b ;
while (~scanf ("%I64d%I64d", &a, &b) && (a||b))
{
if (a>b) a=b ;
output(a,b) ;
puts ("") ;
}
return 0 ;
}



posted @ 2012-01-06 22:36  Seraph2012  阅读(132)  评论(0编辑  收藏  举报