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

poj 3061

时间:2014-10-15 21:17:18      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:io   os   for   sp   on   log   代码   bs   size   

先是看了一下讲解 ,选取 了二分法 ,由于数列都是正数的特殊情况,每一个sum【i】+s 对应一个最小的连续序列,最后只要减掉sum【i】就可以,lower_bound刚好可以用来查找最小的sum【i】+i,算法复杂度(nlogn),另外还有一种尺取法,复杂度只有n,大意是设置t,s两个节点,不断加减来更新res的最小值

下面是ac过的法一代码******************************************

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include <algorithm>


using namespace std;
const int maxn=100010;
int a[maxn];
int sum[maxn];
int times;
int n,s;
int res;
////////////////////
void solve(){


    for(int j=0;j<n;j++){
        sum[j+1]=sum[j]+a[j];
        //cout<<sum[j]<<endl;
    }


    if(sum[n]<s){
       // cout<<‘0‘<<endl;
       printf("0\n");
       return ;//不要忘了跳出
    }
    res=n;
    for(int i=1;sum[i]+s<sum[n];i++){
        int t=lower_bound(sum+i,sum+n,sum[i]+s)-sum;
        res=min(res,t-i);
    }
    cout<<res<<endl;
}
int main(){
    cin>>times;
    while(times--){
        cin>>n>>s;
        memset(a,0,sizeof(a));
        memset(sum,0,sizeof(sum));
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        solve();
    }
    return 0;
}

poj 3061

标签:io   os   for   sp   on   log   代码   bs   size   

原文地址:http://blog.csdn.net/u012315428/article/details/40115815

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