牛客-小Why的商品归位(差分、区间和)
链接:https://ac.nowcoder.com/acm/contest/64384/C
来源:牛客网
超市里一共有 个货架, 个商品,一开始商品的位置是被打乱的,小Why需要将商品全部归位。
小Why在给货架编号后,实现了每个商品所在货架必然在其应在货架之前。
小Why决定手推购物车按编号顺序依次访问每个货架。在访问货架时,小Why可以执行以下两个操作任意多次:
当购物车不为空时,将购物车中的一个商品放上货架。
当货架不为空时,将货架上的一个商品放入购物车。
当小Why跑完一趟后,如果仍有商品没被归位,那么小Why会再次返回 1 号货架重复以上过程。
超市里的购物车同一时刻最多能放 个商品,且每个货架容量无限,请你告诉小Why至少需要跑多少趟才能将商品全部归位。
输入描述:
第一行包括三个整数 ,表示货架个数,商品个数和购物车容量。
接下来 行,每行有两个整数 ,表示第 ii 个商品的所在货架和应在货架。
输出描述:
输出一个整数,表示最少需要的趟数。
示例1
输入
复制
3 3 1
1 2
1 3
2 3
输出
复制
2
我们先讲讲这个样例,首先它的购物车的容量为1,然后第一个商品本应该放在第二个货架上,然后他放在了第一个货架上,然后第二个商品本应该放在第三个货架上他放在了第一个货架上,然后第三个商品本应该放在第3个货架上他放在了第二个货架上,
他最少需要两趟,第一趟再第一个货架上拿上1号商品,然后走到第二个货架上将第一个商品放上,然后拿上第三个商品,走到第三个货架上放上。
然后第二趟在哪第二个商品。
其实这是一个区间覆盖的问题,用的是区间和,我们将这些货架看成一下点,然后点之间相隔看成距离,对于放在1号货架本应该放在2号货架的商品,我们将[1,2]区间++,说明我们得走这一趟,然后我们将所有点进去区间求和之后,我们取区间中的最大值,然后除上购物车的容量就行。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
int a[N];
int main()
{
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=m;i++)
{
int s,e;
cin>>s>>e;
a[s]++;
a[e]--;
}
int ans=0;
for(int i=1;i<=n;i++)
{
a[i]+=a[i-1];
ans=max(ans,a[i]);
}
cout<<(ans-1)/k+1<<endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!