poj2566 尺取法

Posted a_clown_cz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2566 尺取法相关的知识,希望对你有一定的参考价值。

题意:
输入 n m  之后输入n个数 
之后m个询问  对于每个询问 输入一个t    输出  三个数 ans l r  表示从l 到 r的所有数的和的绝对值最接近t 且输出这个和ans
 
思路:就是指针的移动。
 
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<limits.h>
using namespace std;

pair<int,int>p[100005];
int n,m,t,num;

void find(int x)
{
    int i=0,j=1,ans=INT_MAX,temp,l,r,v;
    while(j<=n && ans)
    {
        temp=p[j].first-p[i].first;
        if(abs(temp-x)<=ans)
        {
            ans=abs(temp-x);
            v=temp;
            l=p[i].second;
            r=p[j].second;
        }
        if(temp<x) j++;
        if(temp>x) i++;
        if(i==j) j++;
    }
    if(l>r)
    {
        int a=r;
        r=l;
        l=a;
    }
    printf("%d %d %d\n",v,l+1,r);
}

int main()
{
    while(scanf("%d%d",&n,&m)==2 && (m+n))
    {
        int sum=0;
        p[0]=make_pair(0,0);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&num);
            sum+=num;
            p[i]=make_pair(sum,i);
        }
        sort(p,p+n+1);
        while(m--)
        {
            scanf("%d",&t);
            find(t);
        }
    }
    return 0;
}

 

以上是关于poj2566 尺取法的主要内容,如果未能解决你的问题,请参考以下文章

poj2566 尺取法

POJ2566-Bound Found (尺取法)

poj 2566 尺取法

Bound Found [POJ2566] [尺取法]

POJ - 2566 Bound Found(尺取法+前缀和)

尺取法好题POJ2566-Bound Found