14th 【基础】宾馆房间

这篇博客讲述了在2180年奥运会期间,主人公艾瑞克需要处理大量宾馆房间预订的问题。他面临的主要挑战是计算在最高峰时会超出现有客房数多少,以便及时租赁和装修额外的房子。博客提供了输入描述、输出描述以及数据范围,旨在通过样例输入和输出来说明如何解决这个问题。

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

                                                宾馆房间

【题目描述】:

2180年奥运会竞技类分会场,将在XX市举行。会场自然是政府的事情,我们就别操心了。艾瑞克却被兴奋而苦恼的情绪折磨着,他的宾馆是XX市最好的宾馆,近期旅客投宿的订单m份接踵而至,时间从1~n天,这代表着大把大把的银子,可是他最多只能提供k间客房,更多的他只能提前去租附近的房子并赶紧装修一下,时间很紧啊。

艾瑞克找到了他最好的朋友你:“哪,这是所有的订单,你给我在1s内计算出最高峰时,超出多少间客房,这样我才能知道得去租多少房子啊。”

每张订单包含dj,sj,tj:表示从第sj日至第tj日,预定房间dj间。

住:为了简单起见,假设第一天之前宾馆所有的房间都是空的。

【输入描述】:

第一行包含两个正整数n,m,k,表示天数、订单的数量,和现有客房数。

接下来有m行,每行包含三个正整数dj,sj,tj,表示租借的数量,租借开始、结束分别在第几天。

每行相邻的两个数之间均用一个空格隔开。天数与订单均用从1开始的整数编号。

【输出描述】:

只有一个整数,表示最高峰时还差多少客房,客房足够输出0(骗不到分)。

【样例输入】

4 3 6
2 1 3
3 2 4
4 2 4

【样例输出】

3

【数据范围及描述】:

时间:1s 空间:512M

1<=n,m<=1000,000;1<=sj<=tj<=n;1<=k,dj<=1000;

输入数据较大,最好加外挂



用一个数组记录一下每次的租房和退房的操作,如从i到j天租d个,那么a[i]+=d表示今天多要d个房间,同理,a[j+1]-=d,

然后最后从头开始加s[i]就是每天需要的房间了


#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
int a[1000005],m,n,k,d,i,j,ans,s;

int max(int a,int b)
{return(a>b?a:b);}

int main(){
     cin>>n>>m>>k;
     for(int p=1;p<=m;p++)
     {   cin>>d>>i>>j;
            a[i]+=d;
            a[j+1]-=d;
            }
     for(int p=1;p<=n;p++)
     {  s+=a[p];
        ans=max(ans,s-k);}
      cout<<ans<<endl;
      //while(1);
	  return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值