公交车剩余车票算法题

这篇博客探讨了一个有n个站点的公交线路问题,公交车有m个座位,已售出p张车票,每张车票指定从s[i]到d[i]的有效区间。算法旨在计算从a站点到b站点最多能剩余多少张可用的车票。通过输入实例展示了不同售票情况对剩余票数的影响,并提供了一个Java程序来解决这个问题。

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

问题:

一条路有n个公交车站,第一个站点的下标是0。这条路上有一辆公交车,有m个座位,意思是在起始站可以卖出m个车票。

此时,有p张车票被卖出去了,对于每张车票P[i],从s[i]开始到d[i]站点。

请问从a站点到b站点,最多剩余多少张票可以用?

输入:

第一行输入n  m  p (n个站点,m张票,卖出p张)

第二部分输入卖出的p张车票的站点

p1  d1

p2  d2

p3  d3

最后一行输入我们要乘坐的a到b站点。

思考:

第一种情况
//输入
5 10 3
0 3
1 2
3 4
1 3
//输出 8
5个站点 10张票,卖出3个分别是
03 12 34
要从1到3
03 12 和13有交集,所以占用了2个,剩余8个

第一种情况:
5个站点的情况下。卖出4个,01 12 23 34
但是只会占用1个座位。

答案:

mport java.util.Scanner;

public class Main {
    public static void main( String[] args ) {

        Scanner input = new Scanner( System.in );

        int N = input.nextInt();
        int M = input.nextInt();
        int P = input.nextInt();

        int[] people = new int[N];

        for( int i = 0; i < P; ++ i ) {
            int s = input.nextInt();
            int d = input.nextInt();
            for( int j = s; j < d; ++ j )
                people[j] ++;
        }

        int start = input.nextInt();
        int end = input.nextInt();

        int max = Integer.MIN_VALUE;
        for( int i = start; i < end; ++ i )
            if( max < people[i] )
                max = people[i];
        
        System.out.print( M - max );

        input.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值