码迷,mamicode.com
首页 > 其他好文 > 详细

POJ_2100_Graveyard_Design

时间:2016-04-24 21:43:21      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

描述


http://poj.org/problem?id=2100

求连续平方和=n的序列个数,并输出序列.

分析


直接尺取.

注意:

1.如果要用开根计算的话要写成 " ll ub=(ll)sqrt(n*1.9); "写成 " ll ub=sqrt(n); "会CE.

所以干脆写成 " r*r<=n "

 

#include<cstdio>
#include<queue>
#define ll long long
using std :: queue;

struct node 
{
    ll len,fst;
    node() {}
    node(ll a,ll b) : len(a),fst(b) {}
};
queue <node> q;
ll n;

inline ll val(ll x) { return x*x; }    

int main()
{
#ifndef ONLINE_JUDGE
    freopen("grave.in","r",stdin);
    freopen("grave.out","w",stdout);
#endif
    scanf("%lld",&n);
    ll l=1,r=0,k=0,len=0;
    ll sum=0;
    while(val(r)<=n)
    {
        if(sum<n)
        {
            sum+=val(++r);
            len++;
        }
        else if(sum>n)
        {
            sum-=val(l++);
            len--;
        }
        else
        {
            q.push(node(len,l));
            k++;
            sum-=val(l++);
            len--;
        }
    }
    printf("%lld",k);
    while(!q.empty())
    {
        node t=q.front(); q.pop();
        ll len=t.len,fst=t.fst;
        printf("\n%lld ",len);
        for(ll i=0;i<len;i++) printf("%lld ",fst+i);
    }
#ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}
            

 

POJ_2100_Graveyard_Design

标签:

原文地址:http://www.cnblogs.com/Sunnie69/p/5428034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!