[恢]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 ;
}