Graveyard Design POJ - 2100 (尺取法)

传送门

题意:将一个整数分解为连续数平方之和,有多少种分法?

题解 :直接使用尺取法并记录答案即可

附上代码:


#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;
}

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/83152111