BZOJ3414: Poi2013 Inspector

Unity3d 2017.3 自定义编辑器 枚举 隐藏与显示 自定义编辑器的方法。 第二版。 阅读详情

题目大意:一天公司有n个员工和m个员工记录,每个员工只会在连续的一段时间内工作。现在给出m条记录分别是谁写的、什么时候写的以及写的时候除了他还有多少人。求最大的k使得前k条记录互不矛盾

 

挺神的题...

首先二分答案转成判定性问题,这样记录就没有先后顺序之分了

然后考虑什么情况会出现矛盾:

1.记录本身的矛盾:两条记录是同一时刻,但人数不同

         判断方法:这个是很显然的了,可以直接特判

 

2.记录的记载人产生的约束关系而形成的矛盾:

  比如说一个人在a时刻写过记录,又在b时刻写过记录,这就说明a到b的时刻他都在公司,这时假如中间有个人写除了他以外没人了,那肯定就不对了

  判断方法:我们可以对每个人记录一下最晚开始时间和最早结束时间,当成一条线段,对于每个时间节点,看他被几条线段覆盖,如果线段条数大于当前时间记录的人数,就说明一定无解

 

3.根据记录可以构造出一种方案,但是会超过n个人的限制:

  这个跟上一条的不同点在于,他是可以根据约束条件构造出方案的

  比如1时刻1记录有两个人,2时刻1记录有1个人,3时刻1记录有两个人,显然n=3时是可以的,但n=2就不行

  所以我们只需要算出他的最小符合条件的人数,判断一下是否小于等于n就可以了,那么怎么算呢?

  首先我们按照时间顺序来扫,还是像2一样每个人对应一段区间

  除了当前必须人数(2中的线段条数)now和当前最小符合条件的人数total以外,我们开两个变量来辅助计算

  done表示所对应区间已经过去了,还留下来可以继续工作的人数

  notbegin表示所对应区间还没到,但是提前开始工作的人数

  每到一个新的时刻,我们可以比较一下now+done+notbegin与tot[i](这个点记录的人数)的大小

  如果比tot[i]小,说明人数还不够,则我们需要再让一些人提前开始工作

  如果比tot[i]大,那说明人数多了,我们就优先让对应区间已经过去了的人结束工作,如果还是多,那就让notbegin的人结束工作

 

  这时可能会有一个问题,notbegin的区间还没到怎么可以结束工作呢,这样不是相当于无解了吗?

  我一开始也是这么想的,于是直接return false交了一发,WA了

  原因就是,并不是所有的人都有一个确定的对应区间,有很多人都是没写记录的,那么这些人就可以随时开始随时结束,这里notbegin减下去的是这些人

 

 

具体可以看看代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 100010
#define xrf 707185547
using namespace std;
int n,m;
int t[N],u[N],v[N];
int mn[N],mx[N];
int tot[N];
int st[N],en[N];
bool check(int M)
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		mn[i]=xrf;
		mx[i]=-xrf;
	}
	for(i=1;i<=m;i++)
	tot[i]=st[i]=en[i]=0;
	for(i=1;i<=M;i++)
	{
		mn[u[i]]=min(mn[u[i]],t[i]);
		mx[u[i]]=max(mx[u[i]],t[i]);
		if(tot[t[i]]&&tot[t[i]]!=v[i]+1) return false;
		tot[t[i]]=v[i]+1;
	}
	for(i=1;i<=n;i++)
	if(mx[i]!=-xrf)
	{
		st[mn[i]]++;
		en[mx[i]]++;
	}
	int total=0,now=0;
	int done=0,notbegin=0;
	for(i=1;i<=m;i++)
	if(tot[i])
	{
		now+=st[i];
		if(now>tot[i]) return false;
		if(st[i]<=notbegin) notbegin-=st[i];
		else total+=st[i]-notbegin,notbegin=0;
		if(now+notbegin+done<tot[i]) total+=tot[i]-now-notbegin-done,notbegin=tot[i]-now-done;
		else
		{
			if(now+notbegin>tot[i]) /*return false;*/notbegin=tot[i]-now,done=0;
			else done=tot[i]-now-notbegin;
		}
		now-=en[i];done+=en[i];
	}
	if(total>n) return false;
	return true;
}
void doit()
{
	scanf("%d%d",&n,&m);
	int i,j;
	for(i=1;i<=m;i++)
	scanf("%d%d%d",&t[i],&u[i],&v[i]);
	int l=1,r=m+1,mid;
	while(l<r)
	{
		mid=(l+r)>>1;
		if(check(mid)) l=mid+1;
		else r=mid;
	}
	printf("%d\n",l-1);
}
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	doit();
}


 

 

 

十、强势股的起爆点:第三类买点的实战精解 本文深入解析强势股交易中的第三类买点(三买)实战技巧,涵盖两种经典模式:突破首个中枢后的回踩和底部反转后的直接脱离下跌中枢。通过详细案例和数据分析,揭示三买在捕捉主升浪起爆点时的黄金信号作用,帮助投资者优化风险收益比,提升短线交易成功率。 阅读详情

相关推荐

STM32与FreeRTOS:基于TIM6的高精度系统时间获取实践

本文详细介绍了在STM32与FreeRTOS环境下,基于TIM6定时器实现高精度系统时间获取的实践方法。通过复用FreeRTOS的TIM6硬件资源,开发者可以高效获取毫秒级和微秒级系统时间,同时解决时间溢出和中断处理等关键问题。文章还提供了CubeMX配置技巧、代码实现及性能优化建议,适用于嵌入式系统开发中的精确时间管理需求。

weixin_29169505的博客 359

洛谷P3553/bzoj3414 [POI2013]Inspector 二分答案+贪心

题目分析 首先二分答案,就可以只判断这几条可不可行了。 根据每个人的称述,我们先可以给这些人确定一个大致的“必须存在的区间”,而那些没有称述的人,根据boshi命名法,称其为“幽灵”。 假设当前检查的时刻iii,必须存在的人数为sis_isi​。 nows:由于“必须存在的区间”,而导致当前时刻至少有多少人存在。 people:当前已经被“使用”了的人数。 ghost:当前使用了,且其所在区间还在...

litble的成(tui)长(fei)史 498

数据库实验报告--MySQL

数据库完整版报告--MySQL 包括数据库创建、表的创建、视图以及授权和触发器的创建等内容,全是精华!看完点赞加收藏O(∩_∩)O~。

Mortalz7 4924

POI2013题解

POI2013题解 只做了BZ上有的\(13\)道题。 就这样还扔了两道神仙构造和一道计算几何题。所以只剩下十道题了。 [BZOJ3414][Poi2013]Inspector 肯定是先二分答案,然后每个人的出现区间至少要包含于他自己记录的所有时间点。如果某个人没有记录过那他的出现区间任意。 从左往右扫描,维护以下几个东西: \(t\):目前还有多少人的区间不确定。 \(s\):当前要求...

abcyan1235的博客 249

等保: Postgresql配置ssl链接

等保: postgresql配置ssl链接完整方案和避坑指南

weixin_43557605的博客 4383

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 542

POI2013

bzoj 3144先二分答案,然后就是求一些条件是否都可行。 首先一个人一定在第一次记录到最后一次记录的这段区间内出现。 然后每段区间可以两边扩展,如果一个人没有记录过那么他的区间是任意的。 那么可以把当前工作的人分成三类:在区间内的人,区间未开始的人,区间已经结束的人。 没记录过的人属于第二种。 首先如果一个时间有两个人记录的不一样,那么一定无解。 如果某个时刻必选的人数大于要求的人数

make_it_for_good的博客 596

家用智能监控摄像机如何使用NAS进行存储/备份(小米智能摄像机如何解决群晖 / 飞牛 NAS 识别失败、文件目录不显示问题)

小米摄像头NAS存储总出问题?🤯 别慌!本文揭秘NAS底层逻辑,群晖、飞牛实战指南。手把手教你排查解决所有难题,轻松搞定监控录像安全备份!🔒

XiaoqiangClub的博客 2699

【POI2013】【BZOJ3417】Tales of seafaring

DescriptionYoung Bytensson loves to hang out in the port tavern, where he often listens to the sea dogs telling their tales of seafaring. Initially, he believed them all, however incredible they sounde

CreationAugust is 14 years old forever 995

什么是 SAP Build Process Automation?

SAP Build Process Automation 是一款综合性的低代码工具,允许企业用户快速开发和自动化端到端业务流程。它整合了工作流管理、任务自动化和人工智能技术,提供了一个易于使用的平台,帮助企业更好地应对现代商业挑战。通过该工具,用户无需具备深厚的编程技能即可创建复杂的业务流程。例如,用户可以使用直观的拖放式界面设计流程、设置触发条件、定义任务分配规则,并通过内置的分析功能对流程效率进行评估。流程建模与设计:提供图形化界面,帮助用户直观地设计业务流程。任务自动化。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1260

uniapp(安卓苹果app端) - 微信小程序分享提示报错“由于不支持的分享类型无法分享到微信“,“由于应用和小程序未绑定在同意微信开放平台账号,无法分享到微信“解决办法,uniapp小程序分享失败

uni-app,安卓app,苹果app,手机app端,苹果ios,安卓Android,移动端app,分享,微信分享,微信朋友圈,微信好友,转发,vue2,vue3,App端调用手机的系统分享,微信小程序,分享功能,原生app分享小程序到微信,可分享到微信、朋友圈等,报错,uniapp分享报错由于不支持的分享类型无法分享到微信,未审核应用,uniApp安卓苹果app报错由于应用和小程序未绑定在同意微信开放平台账号,无法分享到微信,微信appid,已经配置了,还是报错,无法解决,一直提示,APP_ID错误,打包

✅ 精选推荐文章 5513

BZOJ3421: Poi2013 Walk

题解看commonc写的吧 时限从50s放到了100s,我53s过了/斜眼笑 想当年commonc开全局int i卡常才卡进去 喜闻乐见 #include #include #include #include #include #include #include #include #include #include #include #include #include #include u

neither_nor 595

基于分水岭分割进行肺癌诊断

近年来,肺癌的发病率和病死率均迅速上升,目前已居所有癌症之首。随着肺癌病人数量的增加,医生对肺部 CT 图像进行研判的工作量也增加了不少,在这种情况下难免工作效率降低甚至会出现误诊。为了帮助医生减少重复性工作,对肺部 CT 图像进行计算机辅助检测的技术就被广泛应用于对肺癌的诊断和治疗过程中。医学 CT 图像处理主要是研究医学图像中的器官和组织之间的关系,并进行病理性分析。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1568

微信小程序手机端打不开?别慌,可能是你的SSL证书链没配全(保姆级排查指南)

本文详细解析了微信小程序在手机端因SSL证书链配置不全导致无法访问的问题,提供了从现象诊断到解决方案的完整指南。通过在线检测工具、服务器配置检查和微信专项检测,帮助开发者快速定位并修复证书链问题,确保移动端用户流畅访问。

weixin_33743248的博客 434

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BZOJ3414 : Poi2013 Inspector

二分答案,没有出现过的时刻没有用,可以进行离散化。 首先如果某个时刻出现多个人数,那么肯定矛盾。 然后按时间依次考虑,维护: $t$:剩余可选人数。 $s$:现在必定有的人数。 $cl$:往左延伸的人数。 $cr$:往右延伸的人数。 如果现在有人必须加入,那么优先踢掉$cl$的人。 如果当前人多了,那么优先让$cr$的人结束工作。 如果最后剩余可选人数非负,则可行。 时间复杂度...

weixin_30319153的博客 72

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[POI2013]Morskie opowieści

[POI2013]Morskie opowieści 题目大意: 一个\(n(n\le5000)\)点\(m(m\le5000)\)边无向图,边权均为\(1\),有\(k(k\le10^6)\)个询问。 每次询问给出\((s,t,d)\),要求回答是否存在一条从\(s\)到\(t\)的路径(可以自交),长度为\(d\)。 思路: 我们只需要求出两点间的奇最短路和偶最短路,询问时根据\(k\)的奇偶...

weixin_34265814的博客 145

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POI2013 题解

明显感觉POI2013比14和15难很多.....不看题解只做上了四道...... 而且POI2013感觉网上题解不是很多啊,大部分还是得看波兰文题解,所以最后也没做上几道题,很悲剧啊 题解链接: Stage I:  Price List       Tapestries       Multidrink     Taxis   Take-out  Stage I

commonc的博客 1300

BZOJ3424: Poi2013 Multidrink

题目大意:给一棵树,每次步伐大小只能为1或2,要求不重复的遍历n个节点,且起点为1,终点为n 首先推荐Claris的题解,讲得还是挺详细的 其次推荐算是此题题解的英文论文,可以在看Claris题解的同时补充一下   不想看英文论文的就可以看我的补充了.... 1.首先证明当一个节点拥有三个或以上的non-trivial的毛毛虫时是无解的               假设我们给予这种情况

commonc的博客 1156

[POI2013]LUK-Triumphal arch

由于syk大佬表示POI都是好题,于是我(被syk大佬一路暴踩后)来水水题解 题意 给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜。求能让A获胜的最小的k solution 二分答案,树形DP,首先二分k,将问题转化为判定性问题 然后记DP[x]为在x的子树内博弈...

weixin_30872157的博客 227

BZOJ3416 Poi2013 Take-out

我们把c看成-k,b看成1,那么我们搞一个栈,从前往后扫,每次如果当前往前长度k+1和为0就说明可以消掉,然后倒序输出 #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespa

neither_nor 632

【Unity】【技巧】如何在代码里面引用到Inspector里面显示的值

此贴以NGUI为例,来解决新手不知如何在代码里面引用到Inspector表示的值的问题。 比如Label的Dimensions怎么获取?

Daniel 的专栏 5174

[Luogu3554] Poi2013 Triumphal arch

Description Foreseeable和拿破仑的御用建筑师让·夏格伦在玩游戏 让·夏格伦会玩一个叫“凯旋门”的游戏:现在有一棵n个节点的树,表示一个国家 1号点代表这个国家的首都 这个游戏由两个人一起玩 一个玩家扮演视察国家的国王,另一个扮演建立凯旋门的建筑师 一开始只有首都有凯旋门 国王每次会从当前所在城市移动到一个相 邻的城市 在国王每次移动前,建筑师可以选择国家内任意不...

weixin_30451709的博客 193

BZOJ3425 Poi2013 Polarization

首先我们要证明这道题的一个性质:最优解一定具有如下形式:以树的某一个重心(可以是任意一个)为根,根的每一个子树里的所有边要么都指向根,要么都指向叶子 引理:首先对于一棵树,我们把所有边的朝向反转,那么好的点对数不变,显然 那么我们要证明树中一定存在一个点,我们称之为“犇点”,其满足以他为根,他的每一个子树里的所有边要么都指向根,要么都指向叶子 假设不存在一个犇点,那么树中一定存在点对(x,y

neither_nor 1308

BZOJ3424 : Poi2013 Multidrink

详细做法以及证明请看论文《Hamiltonian paths in the square of a tree》。 首先将1到n的路径提取出来,作为主干。 定义毛毛虫为去掉叶子之后只有一条单链的树,定义non-trivial的毛毛虫为单链非空的毛毛虫。 对于主干上每个点,计算它的非主干部分是否是毛毛虫,如果某个部分不是毛毛虫,那么肯定无解。 将主干上每个点划分为两类: A:non-triv...

weixin_33967071的博客 152

[POI 2013]Bytecomputer(DP)

题目链接http://main.edu.pl/en/archive/oi/20/baj题目大意给你一个长度为nn的序列aa,序列里每个元素要么是0,要么是-1,要么是1,每次操作可以让a[x]=a[x]+a[x−1]a[x]=a[x]+a[x-1],问至少要做多少次操作,才能让整个序列变成非降序列思路可以发现,最终的序列是一定是-1 -1 -1…-1 -1 -1 0 0 0…0 0 0 1 1 1…

某沙茶的OI代码库 1071

BZOJ3416: Poi2013 Take-out

题目大意:有n块砖,其中白色是黑色的k倍,求一个消除序列,满足以下条件:                   每次消除k+1个砖,其中k块白色,1块黑色,并且这k+1块砖从开始到结束,中间不能路过已经消除过的砖                   数据保证有解   这真是一个悲伤的故事,首先我把题想偏了,以为是只能每次取两边,写了一发WA了 然后网上没有题解,就很悲催的去看了波兰文的题解

commonc的博客 1028
上一篇: BZOJ3417: Poi2013 Tales of seafaring
下一篇: BZOJ3416: Poi2013 Take-out
commonc
博客等级 码龄11年 173粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值