CodeForces 279B Books

http://codeforces.com/problemset/problem/279/B

题意 :Valera 有很多的空闲时间,所以他决定看书,给出n本书,编号1到n,和看每本书需要的时间,他看书是随机的,然后是连续的,从第 i 本开始看,看完了会看第i+1本,然后是第i+2本,问他在时间 t 内最多能看多少本书。

思路 :一开始没看明白题意,以为把时间排序,从小开始往里加,后来才发现人家要求的是连续的。这个就是循环从头开始加,如果时间超了,就从第一本开始往外删。

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std ;

int book[101000] ;
int main()
{
    int n,t ;
    while(scanf("%d %d",&n,&t)!=EOF)
    {
        for(int i = 0 ; i < n ; i++)
        scanf("%d",&book[i]) ;
        int sum = 0 , cnt = 0 ,time = 0,count = 0;
        for(int i = 0 ; i < n ; i++)
        {
            if(time+book[i] > t)
            {
                time -= book[cnt] ;
                cnt++ ;
                i-- ;
                sum--;
            }
            else
            {
                time += book[i] ;
                sum++ ;
                count = max(sum,count) ;
            }
        }
        cout<<count<<endl ;
    }
    return 0 ;
}
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3439484.html