题意
给定一个数
,求又多少种分案将
分为若干个连续整数的平方和,并输出所有方案。
思路
与上题基本类似,直接尺取即可。
代码
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define FOR(i,x,y) for(int i=(x);i<=(y);i++)
#define DOR(i,x,y) for(int i=(x);i>=(y);i--)
typedef long long LL;
using namespace std;
LL _L[1000003],_R[1000003];
int main()
{
LL n;
while(~scanf("%lld",&n))
{
int ways=0,R=0,sqn=sqrt(n);
LL sum=0;
FOR(L,1,sqn)
{
while(R<=sqn&&sum<n)R++,sum+=1LL*R*R;
if(R>sqn)break;
if(sum==n){_L[++ways]=L,_R[ways]=R;}
sum-=1LL*L*L;
}
printf("%d\n",ways);
FOR(i,1,ways)
{
printf("%d ",_R[i]-_L[i]+1);
FOR(j,_L[i],_R[i])printf("%d ",j);
printf("\n");
}
}
return 0;
}