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

poj 2566 尺取法

时间:2017-08-07 18:33:13      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:res   r++   scan   main   while   ret   clu   ring   names   

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
int n,k;
ll t;
typedef pair<int,int>P;
P q[100005];

void solve(int t)

 

{
int l=0,r=1,ans=0x3f3f3f3f;
int ul,ur,sum,res;
while(r<=n)
{
sum=q[r].first-q[l].first;
if(abs(sum-t)<ans)
{
ans=abs(sum-t);
ul=q[l].second;
ur=q[r].second;
res=sum;
}
if(res<t)
r++;
else
l++;
if(l==r)
r++;
if(ul>ur)
swap(ul,ur);
}
cout<<res<<" "<<ul+1<<" "<<ur<<endl;
}

int main()

{
int num,sum;
while(scanf("%d%d",&n,&k)!=EOF&&(n+k))
{
sum=0;
q[0]=P(0,0);
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
sum+=num;
q[i]=P(sum,i);
}
sort(q,q+n+1);
while(k--)
{
scanf("%d",&t);
solve(t);
}
}
return 0;
}

poj 2566 尺取法

标签:res   r++   scan   main   while   ret   clu   ring   names   

原文地址:http://www.cnblogs.com/renwjing/p/7300398.html

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