牛客小白月赛77 C题题解

小Why的商品归位

在这里插入图片描述

问题建模

给定n个商品所在的货架以及要放置的货架,以及货架数m和购物车容量k,对于当前货架可以将货架上的货物放入购物车也可以将购物车上的货物放入货架上。每一次从1号货架开始到最后一个货架,问最少需要循环多少次可以将所有货物都归位。

问题分析

1.转换所求

将每个商品的信息转换为图形信息,即在一个数轴上,每个商品的起始货架到结束货架的点连一条直线。则每个点上有多少条直线经过,就表示该购物车到该货架时最多有多少个商品存在于购物车。则找到最多需要存在于购物车的商品数量,通过将其除以购物车容量就可计算出最多需要几次循环才能将所有商品归位。

2.通过差分获取所需信息

要求被线段覆盖次数最多的点的覆盖次数,则将一次覆盖视作最该段元素加1,则次数最多的点的元素大小即为所求,区间加,单点查询可以通过差分来完成。

代码
#include<bits/stdc++.h>

#define x first
#define y second
#define C(i) str[0][i]!=str[1][i]
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
const int N =1e6+10,INF=0x3f3f3f3f;
int a[N];    

void solve() {
    int n,m,k;
    cin >>n >>m >>k;
    for(int i=0;i<m;i++){
        int x,y;
        cin >>x >>y;
        a[x]++,a[y]--;
    }
    int maxval=0;
    for(int i=1;i<=n;i++){
        a[i]+=a[i-1];
        maxval=max(maxval,a[i]);
    }
    cout <<(maxval+k-1)/k <<"\n";
}   


int main() {
    int t = 1;
    //cin >> t;
    while (t--) solve();
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值