题意:将一个整数分解为连续数平方之和,有多少种分法?
题解 :直接使用尺取法并记录答案即可
附上代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
vector<pair<int,int> >v;
ll n;
int main()
{
scanf("%lld",&n);
ll lb=1,ub=1,sum=0;
while(lb*lb<=n){
if(sum==n){
v.push_back(make_pair(ub-lb,lb));
}
if(sum<=n){
sum+=ub*ub;
ub++;
}else{
sum-=lb*lb;
lb++;
}
}
int cnt=v.size();
sort(v.begin(),v.end());
printf("%d\n",cnt);
for(int i=cnt-1;i>=0;i--){
printf("%d",v[i].first);
for(int j=v[i].second;j<v[i].second+v[i].first;j++){
printf(" %d",j);
}
printf("\n");
}
return 0;
}