poj 2100 Graveyard Design

直接枚举就行了

 

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define SIZE 1024
using namespace std;
const int mod =1000000007;
vector<ll>p;
int main(){
    ll i,j,t;
    ll n,sum,num;
    while(cin>>n){
        p.clear();
        i=j=1;
        sum=0;
        num=(ll)sqrt(n*1.0);
        while(j<=num){
            sum+=j*j;
            if(sum>=n){
                while(sum>n){
                    sum-=i*i;
                    i++;
                }
                if(sum==n){
                    p.push_back(i);
                    p.push_back(j);
                }
            }
            j++;
        }
        cout<<p.size()/2<<endl;
        for(i=0;i<p.size();i+=2){
            cout<<p[i+1]-p[i]+1;
            for(j=p[i];j<=p[i+1];j++){
                cout<<' '<<j;
            }
            cout<<endl;
        }
    }
    return 0;
}
View Code

 

 

 

posted @ 2013-08-02 09:34  _随心所欲_  阅读(190)  评论(0编辑  收藏  举报