HHUOJ 1040

1040: 一起喝果汁

时间限制: 1 Sec  内存限制: 128 MB
提交: 69  解决: 28
[提交][状态][讨论版][命题人:admin]

题目描述

kyoma和mirror都十分的爱喝果汁,于是她们在网上新买了一个榨汁机准备榨果汁喝。可是这个榨汁机的容量D十分有限,一次只能放进一个橙子,并且如果橙子的大小严格超过了B时就不能放进榨汁机。当榨汁机内的橙子大小大于等于榨汁机容量的时候,才能够榨出一杯果汁。榨完一杯果汁后,榨汁机就会清空。
现在她们俩买了N个橙子a1,a2,...,an,按照a1,a2,...,an的顺序放进榨汁机,那么她们最多能喝到多少杯果汁呢?
(假设橙子变为橙汁时质量体积均不变)

输入

输入有多组测试数据(总数据不超过25组),直到文件末尾结束。
输入第一行有3个数字N(1<=N<=1000),B,D(1<=B<=D<=1000000);
N:表示有N个橙子。
B:榨汁机最大容纳的橙子大小。
D:榨汁机的容量
输入第二行有N个数字a1,a2,...,an(1<=ai<=10000),表示每个橙子的大小

输出

每行输出一个数字,表示果汁的杯数。

样例输入

2 7 10
5 6

1 5 10
7

3 10 10
5 7 7

1 1 1
1

样例输出

1
0
1
1

提示

对于样例2:第一个橙子7>5,放不进榨汁机,因此喝到0杯果汁

对于样例3:第一个橙子放进后榨汁机内有5,第二个橙子放进后5+7>=10,榨出1杯果汁,榨汁机清空,第三个橙子放进后榨汁机内为7<10,不榨汁;因此总杯数为1。

 
 
stl解决,就是太慢了。。
 
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <deque>
#include <algorithm>
 
using namespace std;
 
const int maxn = 1005;
int n, b, d;
int k ;
int sz;
int org[maxn];
deque<int> mac;
 
bool s(deque<int> m)
{
    int sum = 0;
    for (int i = 0; i != m.size(); ++i)
    {
        sum += m[i];
    }
    if (sum >= d)
        return 1;
    else
        return 0;
}
int main(void)
{
    while (scanf("%d%d%d", &n, &b, &d) != EOF)
    {
        k = 0;
        mac.clear();
        int count = 0;
        memset(org, 0, sizeof(org));
        int i;
        for (i = 0; i != n; ++i)
        {
            scanf("%d", &sz);
            if (sz <= b)
            {
                org[k] = sz;
                k++;
            }
        }
        if (k == 0)
        {
            cout << 0 << endl;
            continue;
        }
        else
        {
            for (i =0;i<k; i++)
            {
                mac.push_back(org[i]);
                if (s(mac))
                {
                    count++;
                    mac.clear();
                }
            }
            cout << count << endl;
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/CofJus/p/10083262.html