列表

详情


NC14707. 免费WiFi

描述

TRDD开了一家免费WiFi体验店, 所有人都可以免费连接WiFi, 只有一个条件, 你要提前一天预约。今天,TRDD收到了n(1 <= n <=1000)个人的预约, 每个人有一个时间段[L, R] (1 <= L <= R <= 5000)表示这个人预约连接WiFi从L时刻到R时刻。 但是市面上只有一种路由器, 这种路由器单台最多能同时连接m(n <= 100)台设备, TRDD想要知道最少使用多少台路由器就能保证明天每个人都能连上WiFi。

输入描述

第一行包含两个数n(1 <= n <=1000), m (1 <= m <= 100)表示今天有n个人预约, 以及路由单台最大连接个数m。
之后有n行, 第i行有两个数字 [L, R] (1 <= L <= R <= 5000) 表示第i个人预约连接WiFi的时间是从L到R。

输出描述

输出一个数字表示TRDD最少需要开启的路由器的个数。

示例1

输入:

4 1
1 5
2 7
3 4
6 9

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 476K, 提交时间: 2023-04-21 16:42:23

#include<bits/stdc++.h>
using namespace std;
const int N=5010;
int s[N];
int n,m;
signed main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int l,r;
        cin>>l>>r;
        s[l]++,s[r+1]--;
    }
    int maxi=0;
    for(int i=1;i<N;i++)s[i]+=s[i-1],maxi=max(maxi,s[i]);
    cout<<(maxi-1)/m+1;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 456K, 提交时间: 2021-09-07 21:42:53

#include<iostream> 
using namespace std;

int n,m,l,r,mx,flag[5003];

int main(){
	cin>>n>>m;
	while(n--){
		cin>>l>>r;
		for(int i=l;i<=r;i++){
			flag[i]++;
		}
	}
	for(int i=1;i<=5000;i++){
		if(flag[i]>mx)mx=flag[i];
	}
	cout<<(mx+m-1)/m<<endl;
	return 0;
}

Python3 解法, 执行用时: 63ms, 内存消耗: 4756K, 提交时间: 2023-05-29 09:45:04

n,m=map(int,input().split())
l=[0 for _ in range(5003)]
ans=0
for _ in range(n):
    a,b=map(int,input().split())
    l[a]+=1
    l[b+1]-=1
for i in range(5002):
    l[i]+=l[i-1]
print((max(l)+m-1)//m)

上一题