• 技术文章 >Java >java教程

    poj3061(尺取法)

    PHP中文网PHP中文网2017-07-08 18:12:43原创930
    Subsequence
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 14927   Accepted: 6312

    Description

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length of the subsequence of consecutive elements of the sequence, the sum of which is greater than or equal to S.

    Input

    The first line is the number of test cases. For each test case the program has to read the numbers N and S, separated by an interval, from the first line. The numbers of the sequence are given in the second line of the test case, separated by intervals. The input will finish with the end of file.

    Output

    For each the case the program has to print the result on separate line of the output file.if no answer, print 0.

    Sample Input

    2
    10 15
    5 1 3 5 10 7 4 9 2 8
    5 11
    1 2 3 4 5

    Sample Output

    2
    3

    Source

    Southeastern Europe 2006
     
    算法设计:

    代码

    import java.util.Scanner;
    
    public class Main{
    
        /**
         * @param args
         */
        static int n,s;
        static int map[]=new int[100000+3];
        static int sum[]=new int[100000+3];
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scan=new Scanner(System.in);
            int t=scan.nextInt();
            while(t>0){
                n=scan.nextInt();
                s=scan.nextInt();
                for(int i=0;i<n;i++){
                    map[i]=scan.nextInt();
                }
                sovle();
                t--;
            }
            
        }
        private static void sovle() {
            // TODO Auto-generated method stub
            int res=n+1;
            int ss=0,t=0,sum=0;
            for(;;){
                while(t<n&&sum<s){
                    sum+=map[t++];
                }
                if(sum<s){
                    break;
                }
                res=Math.min(res, t-ss);
                sum-=map[ss++];
            }
            if(res>n){
                res=0;
            }
            System.out.println(res);
        }
    
    }

     

    以上就是poj3061(尺取法)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:poj3061 取法
    上一篇:对Calendar的概述 下一篇:JSP基础入门
    千万级数据并发解决方案

    相关文章推荐

    • 一起来理解Java中的泛型• 整理分享Java语言表达式的五个谜题• java反射机制详细解析(总结分享)• 快速上手Java数据结构之字符串• 详细整理java枚举的使用总结
    1/1

    PHP中文网