http://poj.org/problem?id=2100
将一个整数分解为连续数平方之和,有多少种分法?
简单尺取法。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
long long n;
vector < pair<int,int> > v; //first为长度,second为权值
int main(){
cin >> n;
long long l=1,r=1,sum=0;
while (l*l<=n){
if (sum==n) v.push_back(make_pair(r-l,l));
if (sum<=n){
sum+=r*r;
r++;
}
else{
sum-=l*l;
l++;
}
}
int cnt=v.size();
sort(v.begin(),v.end());
cout << cnt << endl;
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");
}
}