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

POJ2100——尺取

时间:2019-10-21 20:34:33      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:mes   long   大于   code   math   tar   color   poj   div   

Graveyard Design

 

题目链接:http://poj.org/problem?id=2100

 

题目大意:给定一个数,求出所有连续区间的平方和等于该数。

 

解题思路:尺取法,当区间小于给定数,区间r++,区间和+=r*r;当区间大于给定数,区间和-=l*l,区间l++。

 

代码如下:

 

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

struct node
{
    long long l,r;
}a[5000];

int main()
{
    long long n;
    scanf("%lld",&n);
    long long s=0,m=sqrt(1.0*n),l=1,r=0;
    long long cnt=0;
    while(r<=m)
    {
        while(s<n)
        {
            r++;
            s+=r*r;
        }
        if(r>m) break;
        if(s==n)
        {
            a[++cnt].l=l;
            a[cnt].r=r;
        }
        s-=l*l;
        l++;
    }
    printf("%lld\n",cnt);
    for(int i=1;i<=cnt;i++)
    {
        printf("%lld",a[i].r-a[i].l+1);
        for(int j=a[i].l;j<=a[i].r;j++)
        {
            printf("% lld",j);
        }
        printf("\n");
    }
    return 0;
}

POJ2100——尺取

标签:mes   long   大于   code   math   tar   color   poj   div   

原文地址:https://www.cnblogs.com/noback-go/p/11715698.html

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