E. Bus Video System

这道题目要求根据公交车经过n个站点后的上下车人数变化,以及车辆的最大载客量w,计算出车辆最初可能有多少种不同的载客数量。通过分析最大上车人数和最大下车人数来确定初始载客量的范围,并判断是否存在满足条件的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

E. Bus Video System
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
The busses in Berland are equipped with a video surveillance system. The system records information about changes in the number of passengers in a bus after stops.

If
x
is the number of passengers in a bus just before the current bus stop and
y
is the number of passengers in the bus just after current bus stop, the system records the number
y

x
. So the system records show how number of passengers changed.

The test run was made for single bus and
n
bus stops. Thus, the system recorded the sequence of integers
a
1
,
a
2
,

,
a
n
(exactly one number for each bus stop), where
a
i
is the record for the bus stop
i
. The bus stops are numbered from
1
to
n
in chronological order.

Determine the number of possible ways how many people could be in the bus before the first bus stop, if the bus has a capacity equals to
w
(that is, at any time in the bus there should be from
0
to
w
passengers inclusive).

Input
The first line contains two integers
n
and
w

(
1

n

1
000
,
1

w

10
9
)
— the number of bus stops and the capacity of the bus.

The second line contains a sequence
a
1
,
a
2
,

,
a
n

(

10
6

a
i

10
6
)
, where
a
i
equals to the number, which has been recorded by the video system after the
i
-th bus stop.

Output
Print the number of possible ways how many people could be in the bus before the first bus stop, if the bus has a capacity equals to
w
. If the situation is contradictory (i.e. for any initial number of passengers there will be a contradiction), print 0.

Examples
inputCopy
3 5
2 1 -3
outputCopy
3
inputCopy
2 4
-1 1
outputCopy
4
inputCopy
4 10
2 4 1 2
outputCopy
2
Note
In the first example initially in the bus could be
0
,
1
or
2
passengers.

In the second example initially in the bus could be
1
,
2
,
3
or
4
passengers.

In the third example initially in the bus could be
0
or
1
passenger.

#include <stdio.h>
#include <stdlib.h>
int a[1001];
int main()
{
    int n,w,i,sum=0,max=0,min=0;
    scanf("%d%d",&n,&w);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1;i<=n;i++)
    {
        sum+=a[i];
        if(sum>max)
        {
            max=sum;
        }
        else if(sum<min)
        {
            min=sum;
        }
    }
    min*=-1;
    if(min>w||max>w)printf("0\n");
        else
    {
        max=w-max;
        if(min>max)
        {
            printf("0\n");
        }
        else
        {
            printf("%d\n",max-min+1);
        }
    }
    return 0;
}

题意:这个题就是说上下公交车,给定n,m,n表示有几个站点,m表示公交车的最大容量,让我们求刚开始车上有多少种情况满足,如果没有情况满足就输出0,反之,输出多少种情况。
思路:先分别求出最大的上车下车人数,注意这里的最大的上车下车不是说只要是正的找个变量累加起来就是我的最大的上车人数,类似于木桶问题,取决于它的最低挡板,在这里发散一下,所需最大的也是所有的中累加完之后的曾经出现的最大的,所以这里的最大的上车人数是所有的数遍历完之后的曾经出现过的最大的上车人数,因为要w-max来算原先车上最多能占多少人,而最大的下车人数更好理解一点,因为你要想符合条件的话,原先车上的人数就得满足大于等于这个最大下车人数吧,不然人都不够,怎么下车呀,所以车上的人数num得满足min<=num<=w-max,如果min>w或者max>w或者min>w-max,都是不符合条件的,反之就输出w-max-min+1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值