当前位置 : 主页 > 网页制作 > HTTP/TCP >

POJ2100——尺取

来源:互联网 收集:自由互联 发布时间:2021-06-16
Graveyard Design 题目链接:http://poj.org/problem?id=2100 题目大意:给定一个数,求出所有连续区间的平方和等于该数。 解题思路:尺取法,当区间小于给定数,区间r++,区间和+=r*r;当区间大

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;
}
网友评论