P1844 阅览室
此题现有题解较为冗长,因此前来贡献一发最短解。
首先正常的思路是直接按题意模拟。即:
- 枚举当前时刻 \(T\)
- 对于每个人,标记该时刻想要拿到的书
- 根据题目的要求判断冲突情况
- 对书进行分配
实现起来复杂的地方主要在处理冲突上,考虑从这方面简化代码。
我们知道,时刻为 \(t\) 时第 \(i\) 个人已经等待的时间与他即将读哪本书无关,只与这个人开始等待的时刻有关。
故设 \(last_i\) 为第 \(i\) 个人开始等待(即读完上一本书)的时刻。则把人按照 \(last\) 的值为第一关键字,到达时间的值为第二关键字进行升序排列,不难证明对于同一本书,等待时间更长的人一定先被计算到。
既然已经说到这步,我们直接按把人排序后的先后顺序分配书就可以避免冲突问题了。
可能比其他做法多了个排序的 log,但对于此题数据范围依然绰绰有余。
AC code:
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int T,n;
struct node{
int arr,k,ls;
int s[10],t[10],flg[10];
}a[N];
bool cmp(node x,node y){
if(x.ls==y.ls) return x.arr<y.arr;
else return x.ls<y.ls;
}
int ans,bk[N];
int main()
{
scanf("%d%d",&T,&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].arr,&a[i].k);a[i].arr++;
for(int j=1;j<=a[i].k;j++) scanf("%d%d",&a[i].s[j],&a[i].t[j]);
a[i].ls=a[i].arr;
}
for(int t=1;t<=T;t++)
{
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(a[i].ls>t||a[i].arr>t) continue;
for(int k=1;k<=a[i].k;k++)
{
if((bk[a[i].s[k]]<=t)&&(!a[i].flg[k]))
{
ans++;a[i].flg[k]=1;
a[i].ls=bk[a[i].s[k]]=t+a[i].t[k];
break;
}
}
}
}
cout<<ans<<endl;
return 0;
}
P1844 阅览室的更多相关文章
- 天梯赛 L1-043 阅览室
L1-043 阅览室 (20 分) 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为 ...
- L1-043 阅览室
天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数.当管理员将0 ...
- PAT-GPLT训练集 L1-043 阅览室
PAT-GPLT训练集 L1-043 阅览室 注意:连续的S和E才算一次借还 代码: #include<iostream> #include<cstdio> using nam ...
- L1-043 阅览室 (20 分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数.当管理员将0 ...
- PAT 天梯赛 L1-043 阅览室
L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者 ...
- 团体程序设计天梯赛-练习集-*L1-043. 阅览室
L1-043. 阅览室 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过100 ...
- PAT L1-043. 阅览室
L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者 ...
- 2017CCCC决赛 L1-3. 阅览室
L1-3 阅览室(20 分) 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过 ...
- PAT 天梯赛 L1-043. 阅览室 【STL】
题目链接 https://www.patest.cn/contests/gplt/L1-043 思路 将每一次 借出和归还 都用 MAP 标记 如果归还的时候 已经被标记过了 那么 ANS ++ 并且 ...
- RHEL7 CentOS7 检查查看精简指令
RHEL7 CentOS7 检查查看精简指令: //////////////////////////检查查看精简指令://///////////////////////////// ///////// ...
随机推荐
- SketchUp Pro 2023 下载和安装教程
SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...
- async/await初学者指南
JavaScript中的async和await关键字提供了一种现代语法,帮助我们处理异步操作.在本教程中,我们将深入研究如何使用async/await来掌控JavaScript程序中的流程控制. 总览 ...
- mysql:EXPLAIN
推荐阅读原文:EXPLAIN用法和结果分析 语法:EXPLAIN SELECT * FROM t1 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句 ...
- 用Claude-2-100K复刻了胡锡进老师的写作风格
大家好,我是老章 最近玩心大发,用Claude-2-100K复刻了胡锡进老师的写作风格,然后用这个风格点评世间万物. 蛮有意思的,直接看效果吧: 怎么实现的呢?老章不喜欢废话,极简介绍一下步骤. 第一 ...
- 叶绿素含量测定仪SPAD-502怎么使用?
本文介绍基于SPAD-502叶绿素仪测定植被叶片叶绿素含量的方法. SPAD-502是由日本柯尼卡美能达(Konica Minolta)株式会社生产的轻便.手持式叶绿素仪,可以在不破坏作物的情 ...
- 根据图片搜索excel
问题描述:在excel使用中,当我们用大量的excel记录图文信息的时候,如果excel过多,比如成百上千个,里面都是包含大量的图片.这个时候如果想要根据图片快速找到这张图片可能被哪些excel包含, ...
- 剪切图片, 原文自https://blog.csdn.net/sinat_41104353/article/details/85209456
因为在 OpenCV2 里面,所有的东西都是 numpy array 即 np.ndarray1,所以使用 opencv 剪切图像主要原理是用 ndarray 的切片.一张图片基本上都是三维数组:行, ...
- RocketMq消费原理及源码解析
消费原理概览 先简单说下常见的rocketMq的部署方式,上图中broker为真正计算和存储消息的地方,而nameServer负责维护broker地 图中右侧consume message部分即是本文 ...
- quarkus依赖注入之三:用注解选择注入bean
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<quarkus依赖注入> ...
- VS Code 有哪些好用的插件呢?【持续更新】
一.画图工具:vscode-drawio 功能:在 VSCode 中画流程图.数据流图等等. 使用方法: 创建一个后缀名为 .drawio 的文件,然后用 VSCode 打开 ...