大大的疑问。为什么数据换成 int 就会超时呢?而变成long long就ac....求大神指教。
下附 尺取法的代码:
#include <cstdio>
#include <iostream>
using namespace std;
pair<long long,long long>p[1000000];
int main()
{
long long k,sum=0;
while(~scanf("%I64d",&k))
{
sum=0;
long long a=1,b=1,ans=0;
while(1)
{
while(sum<k)
{
sum+=b*b;
b++;
}
if(sum==k)
p[ans++]=make_pair(a,b);
if((b-1)*(b-1)>k) //一开始用b*b>k wa了几次。
break;
sum-=a*a;
a++;
}
printf("%lld\n",ans);
for(int i=0;i<ans;i++)
{
printf("%lld ",p[i].second-p[i].first);
for(long long j=p[i].first;j<p[i].second;j++)
printf("%lld ",j);
printf("\n");
}
}
return 0;
}