PTA天梯赛的赛场安排

2023-11-05

rooms.jpg

天梯赛使用 OMS 监考系统,需要将参赛队员安排到系统中的虚拟赛场里,并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们,以便发放比赛账号。为了尽可能减少教练和监考的沟通负担,我们要求赛场的安排满足以下条件:

  • 每位监考老师负责的赛场里,队员人数不得超过赛场规定容量 C;
  • 每位教练需要联系的监考人数尽可能少 —— 这里假设每所参赛学校只有一位负责联系的教练,且每个赛场的监考老师都不相同。

为此我们设计了多轮次排座算法,按照尚未安排赛场的队员人数从大到小的顺序,每一轮对当前未安排的人数最多的学校进行处理。记当前待处理的学校未安排人数为 n:

  • 如果 n≥C,则新开一个赛场,将 C 位队员安排进去。剩下的人继续按人数规模排队,等待下一轮处理;
  • 如果 n<C,则寻找剩余空位数大于等于 n 的编号最小的赛场,将队员安排进去;
  • 如果 n<C,且找不到任何非空的、剩余空位数大于等于 n 的赛场了,则新开一个赛场,将队员安排进去。

由于近年来天梯赛的参赛人数快速增长,2023年超过了 480 所学校 1.6 万人,所以我们必须写个程序来处理赛场安排问题。

输入格式:

输入第一行给出两个正整数 N 和 C,分别为参赛学校数量和每个赛场的规定容量,其中 0<N≤5000,10≤C≤50。随后 N 行,每行给出一个学校的缩写(为长度不超过 6 的非空小写英文字母串)和该校参赛人数(不超过 500 的正整数),其间以空格分隔。题目保证每所学校只有一条记录。

输出格式:

按照输入的顺序,对每一所参赛高校,在一行中输出学校缩写和该校需要联系的监考人数,其间以 1 空格分隔。
最后在一行中输出系统中应该开设多少个赛场。

输入样例:

10 30
zju 30
hdu 93
pku 39
hbu 42
sjtu 21
abdu 10
xjtu 36
nnu 15
hnu 168
hsnu 20

输出样例:

zju 1
hdu 4
pku 2
hbu 2
sjtu 1
abdu 1
xjtu 2
nnu 1
hnu 6
hsnu 1
16

解析:

        cnt记录当前人数大于房间容量的数量,vector记录当前有剩余空间的房间,模拟。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=5010;
int n,c,cnt;
string arr[N];
vector<int>v;
map<string,int>mp;
struct node{
	string name;
	int num;
	bool operator<(const node& a)const{
		return a.num>num;
	}
};
priority_queue<node>q;
int main(){
	cin>>n>>c;
	for(int i=1;i<=n;i++){
		string s;
		int x;
		cin>>s>>x;
		q.push({s,x});
		arr[i]=s;
	}
	while(q.size()){
		string name=q.top().name;
		int num=q.top().num;
		q.pop();
		if(num>=c){
			cnt++;
			mp[name]++;
			if(num-c>0)
				q.push({name,num-c});
		}
		else{
			int k=0;
			for(int i=0;i<v.size();i++){
				if(c-v[i]>=num){
					v[i]+=num;
					mp[name]++;
					k=1;
					break;
				}
			}
			if(!k){
				v.push_back(num);
				mp[name]++;
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<arr[i]<<" "<<mp[arr[i]]<<endl;
	}
	cout<<v.size()+cnt;
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PTA天梯赛的赛场安排 的相关文章

  • 模板类包装任意类型/非类型模板类

    假设我有一个模板类base和一个班级wrapper其中包含一个实例化成员base 我想定义班级wrapper这样它依赖于模板参数包 该参数包只是 传递 给实例化成员base 例如 考虑下面的代码 它工作得很好 include
  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 我可以使用反射更改 C# 中的私有只读字段吗?

    我想知道 由于很多事情都可以使用反射完成 我可以在构造函数完成执行后更改私有只读字段吗 注 只是好奇 public class Foo private readonly int bar public Foo int num bar num
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 如何避免选择项目时 winforms 树视图图标发生变化

    我正在一个小型 C Winforms 应用程序中尝试树视图 我已经以编程方式将 ImageList 分配给树视图 并且所有节点都很好地显示了它们的图标 but当我单击一个节点时 它的图标会发生变化 变为 ImageList 中的第一个图像
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 如何在 C++ 中使用 PI 常数

    我想在一些 C 程序中使用 PI 常数和三角函数 我得到三角函数include
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn

随机推荐

  • CSS cubic-bezier() 函数 贝塞尔曲线 动画

    https www runoob com cssref func cubic bezier html
  • Jgit基础教程(Java调用git)

    前言 最近公司需要做一个java调用git的工具 这里简单的介绍了一下基本操作方法以及一些衍生的信息获取 或有不对的地方请大家批评指正 转载请注明出处 一 Jgit依赖导入
  • 【C】快速求最大公约数的三种办法

    最大公因数 也称最大公约数 最大公因子 指两个或多个整数共有约数中最大的一个 a b的最大公约数记为 a b 同样的 a b c的最大公约数记为 a b c 多个整数的最大公约数也有同样的记号 求最大公约数有多种方法 常见的有质因数分解法
  • yolo类检测算法解析——yolo v3

    每当听到有人问 如何入门计算机视觉 这个问题时 其实我内心是拒绝的 为什么呢 因为我们说的计算机视觉的发展史可谓很长了 它的分支很多 而且理论那是错综复杂交相辉映 就好像数学一样 如何学习数学 这问题似乎有点笼统 有点宽泛 所以我都会具体问
  • JavaWeb(13)超市订单管理系统smbms——登录功能及优化

    一 项目搭建 1 搭建一个maven web项目 2 配置Tomcat 3 测试项目是否能够跑起来 4 导入jar包 jsp servlet mysql驱动 jstl stand 5 创建项目包结构 6 编写实体类 ORM映射 表 类映射
  • [Shell] 常用写法

    iF9PzeAQm9 H7oi r6YdLk6 lxJ d c 常识 ls ls lh time style Y m d H M S awk condition move1 move2 文件名1 文件名2 NR 行数 索引 NF 列数 一般
  • JVM--基础--19.4--垃圾收集器--Parallel Scavenge

    JVM 基础 19 4 垃圾收集器 Parallel Scavenge 1 结构图 2 Parallel Scavenge 并行 收集器 2 1 特征 新生代收集器 使用复制算法 并行的多线程收集器 控制的吞吐量 吞吐量 运行用户代码时间
  • Android Surface解析

    源码截图是Android 5 1 1 r6 一 App和Surface的关系是怎样的 不论是用Skia绘制二维图像 还是用OpenGL绘制三维图像 最终Application都要和Surface交互 Surface 是什么 Handle o
  • Ubuntu企业级初始配置实战

    第1章 Ubuntu安装后初始化配置 1 使用xshell远程连接Ubuntu 此部分见老男孩老师视频演示 2 配置Ubuntu网卡 修改网卡配置注意事项 1 ubuntu从17 10开始 已放弃在 etc network interfac
  • ftp登录报错:530 This server does not allow plain FTP. You have to use FTP over TLS

    filezilla 状态 不安全的服务器 不支持 FTP over TLS 相关的详细问题如下 解决方案1 如果服务器是 FileZilla Server 的话 提示信息是 530 This server does not allow pl
  • 【转】Dr.com 5.20破解教程

    Dr com 5 20破解教程 方法一 1 首先下载相关工具 Process Explorer 大家可以自行百度 一般绿色汉化版就可以 右键选择以管理员权限运行process的主程序 然后运行drcom客户端程序drmain exe 并登录
  • 【计算机网络】OSI参考模型与TCP/IP分层模型对比(体系结构对比)

    笔记整理 协议 简单来说 协议就是计算机与计算机之间通过网络实现通信时事先达成的一种 约定 这种约定使得那些由不同厂商的设备 不同的操作系统组成的计算机之间 只要遵循相同的协议就能够实现通信 就好比两个人使用不同国家的语言就行对话 是无法相
  • Selenium(一)2.第一个自动化测试脚本

    前面我们可以成功启动浏览器啦 接下来我们完成第一个自动化测试的脚本 举例 验证打开的链接是Selenium官网页面 分析问题 我们输入了一个url 然后打开网页 那么怎么确定这个页面是我们想要的页面呢 获取页面的url是不是与输入的一致 获
  • QT调用linux echo命令无效的解决方法

    问题 Qt中使用 QProcess execute echo 1 gt myFile 写文件 执行成功后 不生效 但是把打印出的命令放在终端里执行可以生效 原因 网上说 因为echo 是shell内建命令 必须使用如下形式 QProcess
  • 利用Excel数组公式统计各班优秀人数

    期末考试期间 教导处的阿明忙得不亦乐乎 不时地发出感叹 现在各班编在一起考试 统计优秀 及格 低分人数 真让人头疼 我知道他在操什么心 却心不在焉地说 countif函数你不是会用吗 会啊 但是 你看看 全年级各科成绩都在同一个工作表中 比
  • UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might b

    UserWarning This figure includes Axes that are not compatible with tight layout so results might be incorrect self figur
  • 虚拟机实现远程桌面连接

    目录 一 操作方法 二 连接成功 一 操作方法 首先点击控制面板 点击系统 点击改变设置 点击远程 选择允许连接 就可以 启用远程桌面 然后再命令提示符窗口输入 netstat a 查看启用远程桌面后打开的端口3389 表明其他计算机可以连
  • DetNet: A Backbone network for Object Detection 笔记

    Face 的lizeming大神注意到了现有Detection Network的两大通病 借用原本为了class而设计的network 牵强地附加上其他辅助结构来实现Detection 下采样能带来大感受野 从而提升class任务精度 但下
  • 华夏相机开发/臻识相机开发/车牌识别器开发对接使用总结

    最近做了款自助洗车小程序项目 需要用到车牌识别 华夏 臻识这两家相机均有使用 特此记录开发中的问题 1 初次使用 购买途径 当地购买的华夏相机T83 价格贵 且显示屏语音均无法使用 遂只对接了开闸 开发方式 因为自助洗车项目需要保持双端的及
  • PTA天梯赛的赛场安排

    天梯赛使用 OMS 监考系统 需要将参赛队员安排到系统中的虚拟赛场里 并为每个赛场分配一位监考老师 每位监考老师需要联系自己赛场内队员对应的教练们 以便发放比赛账号 为了尽可能减少教练和监考的沟通负担 我们要求赛场的安排满足以下条件 每位监