列表

详情


NC20951. 网络优化

描述

《梦三国2》是一款3D MOBA类网游。游戏继承《梦三国》的三国文化背景和基础玩法,并加入许多全新地图和全新竞技玩法。由于人气高,游戏在线人数与日俱增,我们知道当在线人数不断增长的时候,会给服务器带来巨大的压力。
已知该游戏中共有n名用户,编号从1到n,服务器共有m条服务线,每个用户最多只能登陆一条线,第i条线最多可以容纳v[i]名用户同时在线,且只能给编号在[l[i],r[i]]范围内的用户提供服务。现在希望找出一种合理的资源分配方案,使得同时在线人数最大化,请输出这个最大人数。

输入描述

数据组数不超过10
对于每组数据。
第一行包括两个正整数n,m(1<=n,m<=10000)
接下来m行,每行三个整数l[i],r[i],v[i]

输出描述

对于每组数据输出一个正整数,即最多容纳的用户数量

示例1

输入:

5 3
1 1 1
2 4 2
2 3 2

输出:

4

说明:

我们可以让1号服务线服务用户1,2号服务线服务用户4,3号服务线服务用户2和3

原站题解

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

C++ 解法, 执行用时: 80ms, 内存消耗: 556K, 提交时间: 2022-05-03 14:25:29

#include<bits/stdc++.h>
using namespace std;
int n, m;
struct node {
	int l, r;
	int v;
}a[10010];
bool cmp(node x, node y) {
	return x.r < y.r;
}
int main() {
	while (cin >> n >> m) {
		int vis[10010] = { 0 };
		int ans=0;
		for (int i = 1;i <= m;i++) cin >> a[i].l >> a[i].r >> a[i].v;
		sort(a + 1, a + 1 + m, cmp);
		for (int i = 1;i <= m;i++) {
			for (int j = a[i].l;j <= a[i].r;j++) {
				if (!vis[j]&&a[i].v) {
					vis[j] = 1;
					a[i].v--;
					ans++;
				}
			}
		}
		cout << ans << "\n";
	}
}

上一题