Graveyard Design POJ - 2100 (尺取法)
阿新 • • 發佈:2018-10-31
題意:將一個整數分解為連續數平方之和,有多少種分法?
題解 :直接使用尺取法並記錄答案即可
附上程式碼:
#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; }