CF1825C LuoTianyi and the Show

传送门(luogu)

传送门(CF)

前言

我来水题解力

简化题意

\(n\) 个人,\(m\) 个座位,每个人落座的方法有三种:

  1. 坐最左边的人的左边,没人的话就做 \(m\) 号座位,若最左边的为 \(1\) 号,就离开;

  2. 坐最右边的人的右边,没人的话就做 \(1\) 号座位,若最右边的为 \(m\) 号,就离开;

  3. 坐在 \(x_i\) 号座位上,有人就离开。

问任意搭配 \(n\) 个人落座顺序,坐下人数的最大值。

(这真的是简化题意吗)

Solution

思路

容易发现我们可以:

一直放 \(1\)\(2\) 类人,碰到 \(3\) 类人要坐的位置就让 \(3\) 类人坐。

因为碰到第 \(3\) 类人的座位时,与其放 \(1\)\(2\) 类人浪费放置次数,不如直接放第 \(3\) 类人。

那么我们要从哪儿开始放才能保证是最优解呢?

不难发现,起点的位置要么是一个第 \(3\) 类人的左右两边,要么是 \(1\)\(m\) 号点。

于是,对于每一个 \(3\) 类人,我们可以计算出他左右两边不计其他第 \(3\) 类人占的座位的空座位数,以此来一一放置第 \(1,2\) 类人。

别忘了 \(1,m\) 号点也是起点。

时间复杂度

计算空座位只需 \(O(n)\)

代码实现

写的丑,轻喷。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 1e5 + 5;

int t, n, m;
int a[N], cntl, cntr;

int main(){
	cin >> t;
	while(t -- ) {
		cntr = 0; cntl = 0; //多次不清空,亲人两行泪
		
		cin >> n >> m; 		
		for (int i = 1; i <= n; ++ i ) 
			cin >> a[i];
		
		sort(a + 1, a + 1 + n); //排序方便计算空座位数
		
		int i;
		for (i = 1; i <= n; ++ i ) //计算 1,2 类人的数量 
			if(a[i] == -1) cntl ++ ;
			else if(a[i] == -2) cntr ++ ;
			else break;
		
		n = unique(a + i, a + 1 + n) - a - 1;  
		//将第 3 类人去重,因为相同座位只能坐一个;i 是第一个第 3 类人的编号
		
		int ans = 0;
		
		for (int j = i; j <= n; ++ j ) {
			int L = a[j] - 1 - (j - i); //(j-i) -> a[j]之前有多少个第 3 类人
			int R = m - a[j] - (n - j); //(n-j) -> a[j]之后有多少个第 3 类人
			ans = max(ans, 1 + n - i + min(L, cntl) + min(R, cntr));
		} 
		
		ans = max(ans, n - i + 1 + max(min(cntl, m - (n - i + 1)), min(cntr, m - (n - i + 1))));
		//(n - i + 1) -> 第 3 类人个数
		
		cout << ans << "\n";
	}
	return 0;
}

本文转载于网络 如有侵权请联系删除

相关文章

  • 幻城云笔记子比主题同款设置数据一键导入

    我们用过子比主题的应该都知道,这个主题什么都好,就是有点难设置,有一些新手设置的时候愣是两三天设置不好,可以说是能让人自闭的主题,那么我今天就把我的网站同款的设置文件导出来,供大家导入一键设置,有需要的可以来下载了。我这个呢,目前已经把所有该设置的都设置好了,然后你们使用的话一键导入修改一下你的seo标题关键词描述,再修改一下logo就完事了。演示网站:https://hcnote.cn你们可以先看一下我的这种风格喜不喜欢,如果不喜欢这样的话,那就建议别去使用了,毕竟谁的审美都不同,我这样的设置,我自己认为还是比较好的。我这样设置的特点没有任何的花里胡哨的功能,简洁优美,小而美,精而巧。所有该设置的都已经设置完了纯净无污染,采用官方备份恢复功能对比壳屋栏一眼就让人很舒适5.不会出现让人感觉臃肿下面是壳屋栏和我站的对比壳屋栏的演示图下面是我的幻城云笔记演示图一眼明了,不像壳屋栏,各种无用功能使劲堆,速度拖的贼拉慢(゚O゚)至于导入方法,这个应该不用我说了吧?都来逛壳屋栏了,总不可能和我站一些用户一样不知道怎么导入吧?如果真的不会建议去我这找一下我的那个文章,里面有导入教程。下载链接:ht

  • Python - 如何将 list 列表作为数据结构使用

    列表作为栈使用栈的特点先进后出,后进先出如何模拟栈?先在堆栈尾部添加元素,使用append()然后从堆栈顶部取出一个元素,使用pop()#模拟栈 stack=[1,2,3,4,5] #进栈 stack.append(6) stack.append(7) #查看栈 print(stack) #出栈 print(stack.pop()) print(stack) #输出结果 [1,2,3,4,5,6,7] 7 [1,2,3,4,5,6]复制列表作为队列使用队列的特点先进先出,后进后出list能实现队列吗?可以,但不推荐列表用作先进先出的场景非常低效因为在列表的末尾进行添加、移出元素非常快但是在列表的头部添加、移出元素缺很慢,因为列表其余元素都必须移动一位如何模拟队列?使用collections.deque,它被设计成可以快速从两端添加或弹出元素#collections.deque fromcollectionsimportdeque #声明队列 queue=deque(["polo","yy","mike"]) #

  • ABAP技术梳理回顾

    之前已经写到公众号了,发现没同步过来,补一下。ABAP技术梳理回顾(qq.com)首先庆祝下我司继续领跑,朋友圈号称杀疯了~也欢迎大家加入,base地一线+重庆+大连最近真的太忙了,太忙了。然后呢,就前几天和小伙伴聊的时候对他们的迷茫的点,做一个总结梳理与回顾,虽然这篇应用的技术,可能90%都不会在实际项目使用了,或者说已经通过SAP的升级有了解决方案了。不过做个回顾吧,万一大家有遇到呢。有些不是纯ABAP的开发知识,是从整体到细节分享的技术总结:有些因为自己也太久太久没做,也当对自己的一个技术回顾,快速过: 20年前:汇编语言:1.首先是有实验的目的:也就是课程设计和思路 2.然后是进行设计落地: 3.最后是汇编语言对设计进行机器指令识别验证: 20年前-15年前: XML/XSLT/JS/JQuery/J2EE等:因为是做产品研发,当时公司是物理手段解决的资料COPY(研发电脑直接是用胶水堵住USB口),所以完全没有办法学习公司内部使用的,类似Xpage(非XPath)这样的有专利的架构 可以看到已经完全过时了,源代码失效 好,回顾了之前的例程,现在总结下,从之前的学习和研发经验中

  • 排障集锦:九九八十一难之第十四难!------------- 安装magent时make编译报错

    安装magent报错信息如下make,出现以下gcc-Wall-O2-g-I/usr/local/libevent/include-c-omagent.omagent.c magent.c:在函数‘writev_list’中: magent.c:623:错误:‘SSIZE_MAX’未声明(在此函数内第一次使用) magent.c:623:错误:(即使在一个函数内多次出现,每个未声明的标识符在其 magent.c:623:错误:所在的函数内也只报告一次。)复制解决方案如下需要修改vimketama.h 在第一行加上 #ifndefSSIZE_MAX 在第四行加上 #defineSSIZE_MAX32676 在最后添加 #endif复制vimMakefile//在后面加上-lm LIBS=-levent-lm复制

  • Linq 学习笔记之 linq to object

    Take方法取出集合中前几个元素eg:varlisttop=list.Take(3);TakeWhile方法TakeWhile方法用于取序列中从头开始算起符合条件的元素直到遇到不符合条件的元素为止。eg:string[]names={"aa","bbb","cccc"};vartakenames=names.Takewhile(n=>n.length==2)返回:“aa”skip方法用于跳过序列中指定数量的元素,然后返回剩余的元素。eg:string[]names={"aa","bbb","cccc"};vartakenames=names.Skip(2)返回:“cccc”SkipWhile方法 用于只要满足指定的条件,就跳过已经对比过的元素,返回剩余的元素。eg:string[]names={"aa","bbb","cccc"};vartakenames=names.SkipWhile(n=>n

  • App inventor 编写安卓app控制 ESP8266

    原理简述:利用发布订阅模式,即:ESP8266订阅了一个主题,再利用appinventor编写的app往这个主题发布消息,由于ESP8266订阅了这个消息,所以就可以收到app发布得消息,从而执行相应得动作。基于TCP长连接的模式,ESP8266通过TCP长连接,连接到服务器,app也同样通过TCP长连接,连接到服务器,两者通过主题(topic)进行耦合。第一下载ESP8266示例(arduinoide编程开发)下载地址:http://www.cloud.bemfa.com/zip/tm_bemfa_led.zip本demo是利用arduinoIDE开发,关于arduinoIDE的ESP8266环境配置可参考:环境配置:http://bbs.bemfa.com/6第二修改demo例程需要修改的信息有WIF名称,WIFI密码,用户私钥UID,设备主题topic。用户私钥可以巴法云控制台获取http://www.cloud.bemfa.com/tcpfast.php注册绑定邮箱即可在巴法创客云控制台获取。关于主题topic:主题可在控制台新建,字母+数字自定义组合即可。如下,例程的主题为l

  • GitHub上Star量最高的5个机器学习项目

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载本文介绍了GitHub上star量最高的5个机器学习项目,涉及人脸识别、文本处理、机器学习框架等。机器学习领域正在飞速发展。GitHub是一张举世瞩目的白板,高质量的代码通常被发布在这张充满智慧的无限大白板上。显然,我们不可能追踪机器学习世界中的所有东西,但是GitHub上每个项目都具备自己的star量。即,如果你标星了一个仓库,这意味着你对这个项目表达了赞赏,同时也跟踪了你觉得有意思的仓库。星数排名可作为了解最受关注项目的重要指标。本文就介绍了机器学习领域星数排名最高的5个项目。FaceRecognition:26073★GitHub地址:https://github.com/ageitgey/face_recognition?source=post_page---------------------------这是世界上最简洁的人脸识别工具。它提供对Python和命令行的应用程序接口(API),其用途是识别以及操作图像中的人脸。它使用Dlib最先进的人脸识别算法构建,该深度学习模型在LFW(Label

  • K8s反向代理负载均衡组件ingress

    K8s反向代理负载均衡组件ingress参考文档https://github.com/kubernetes/ingress/tree/master/exampleshttps://mritd.me/2017/03/04/how-to-use-nginx-ingress/http://www.dockerinfo.net/1132.htmlk8s集群安装部署http://jerrymin.blog.51cto.com/3002256/1898243k8s集群RC、SVC、POD部署http://jerrymin.blog.51cto.com/3002256/1900260 k8s集群组件kubernetes-dashboard和kube-dns部署http://jerrymin.blog.51cto.com/3002256/1900508k8s集群监控组件heapster部署http://jerrymin.blog.51cto.com/3002256/1904460k8s集群反向代理负载均衡组件部署http://jerrymin.blog.51cto.com/3002256/190446

  • poj-3185-开关问题

    描述牛一行20他们喝的水碗。碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水)。他们希望所有20个水碗那么,因此用宽鼻子翻碗。嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两端的情况下碗——两碗)。给定的初始状态碗(1=不能饮用的,0=饮用——它甚至看起来像一碗),什么是必要的最小数量的碗翻转将所有的碗那么?输入1号线:一行20空格分隔的整数输出线路1:所需的最小数量的碗翻转翻碗那么(即。0)。对于给定的输入,它总是可以找到一些组合的翻转操作碗200。样例输入00111001101100000000样例输出3提示解释的样本:翻转碗4,9岁和11岁时让他们饮用:00111001101100000000(初始状态)00000001101100000000(后翻碗4]00000000011100000000翻碗后[9]00000000000000000000翻碗后[11]思路: 分别从左右两边开始,找到为1的位置,让后两个取反;不可能出现最后位置或首位置翻到最后扔为1;所以当这种情况出现就赋大值给计数器并终止 循环;最后取左右两计数器的最小值 #include<

  • silverlight ListBox 多列图片效果

    这个功能之前用wpf写过一次这次用Silverlight写一次这两种写法上基本上没有太大的差别这个Demo并不完美,只是给大家提供一个思路源码:SilverLightListPricture.rar看一下效果思路是:      修改ItemTemplate样式       ItemsPanelTemplate用WrapPanel显示先为image绑定图片添加一个转换类usingSystem; usingSystem.IO; usingSystem.Net; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Data; usingSystem.Windows.Documents; usingSystem.Windows.Ink; usingSystem.Windows.Input; usingSystem.Windows.Media; usingSystem.Windows.Media.Animation; usingSystem.Windows.Media.Imaging; usingSyste

  • 语音识别类产品的分类及应用场景

    前言:本文作者@焦糖玛奇朵,是我们“AI产品经理大本营”早期成员,下面是她分享的第1篇文章,欢迎更多有兴趣“主动输出”的朋友们一起加入、共同进步:)音频由公众号“闪电配音”提供媒体和AI巨头们乐于给大众描绘一幅幅精彩的未来生活蓝图:人工智能可以化身为你的爱车,在沙漠、森林或小巷中风驰电掣;可以是智慧公正的交警,控制红绿灯、缓解交通的拥挤;还可以是给人以贴心照顾的小助理,熟悉你生活中的每一处小怪癖。在看到这些美妙的畅想之后,作为一个严谨认真的AI产品经理,我不禁想去探索上述美好未来的实现路径;今天,让我们从人工智能中的感知智能开始——聊聊“语音识别类产品”。1定义语音识别是将人类的声音信号转化为文字的过程。语音识别、人脸识别和OCR等都属于人工智能中的感知智能,其核心功能是将物理世界的信息转化成可供计算机处理的信息,为后续的认知智能提供基础。2语音识别能满足或支撑的需求层次1、人与人之间的信息同步转化成文字的语音信息,由于少了时间轴的约束,在同等量级的情况下,人类使用眼睛获取的速度远远快于耳朵。当然,确实也损失掉了一些信息,比如情绪。2、检索&语义抽取利用语义建模,对某些业务场景

  • 结合springboot条件注入@ConditionalOnProperty以及@ConfigurationProperties来重构优化代码

    @ConditionalOnProperty实现按需注入bean 短信工具类SmsUtil zhenghe-common是一个基础包。 SmsUtil坐落在zhenghe-common里。先看看Smsutil的面目。 packagecom.emax.zhenghe.common.util; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.context.annotation.Configuration; @Slf4j @Configuration publicclassSmsUtil{ @Value("${smtp.config.username}") privateStringuserName; @Value("${smtp.config.requestAddress}") privateStringrequestAddress; @Value("${smtp.config.password}") privateStringpassWord; @Va

  • Openlayers离线载入天地图

    概述:经过一个春节的休整,今天最终開始了!任何时候。都不要忘记学习。学习是一辈子的事情!今天,我来说说怎样实现天地图的离线以及Openlayers载入离线数据实现天地图数据的展示。实现:1、获取天地图的数据能够通过网络上下载各大地图的工具将天地图的数据下载下来。并制作成mbtiles文件。制作过程在此就不详述,将已经制作好的一个文件上传到了百度网盘。须要的童鞋能够下载哦~~~~下载链接:http://pan.baidu.com/s/1dEmNtnFpassword:xqd82、读取mbtiles并返回到页面mbtiles事实上就是一个sqllite数据库,其具体可移步至http://www.cnblogs.com/i-gps/p/3919475.html查看具体。在此方案中,我用了一个servlet。具体的实现代码例如以下:packagecom.lzugis.web; importjava.io.ByteArrayInputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.Outpu

  • NuGet的简单科普

    1:搭建自己的NuGet服务器 新建一网站项目,然后打开程序包管理器控制台,使用“Install-PackageNuGet.Server-Version2.2.2”命令 2:发布自己的Package 下载NuGet.exe,并把它放到系统变量中 2.1创建nuspec文件 进入项目目录,按下Shift并单击鼠标右键,选择在此处打开命令窗口 使用 nugetspec命令,创建nuspec文件 文件部分可替换参数解释如下   关于程序集版本号的设置默认是 [assembly:AssemblyVersion("1.0.0.0")] [assembly:AssemblyFileVersion("1.0.0.0")] 可将AssemblyFileVersion注释掉,AssemblyVersion可设置为1.0.*生成的版本号将会类似于1.0.6109.25317,后面的2个数字是必然递增的 2.2nuspec的依赖 2.2.1资源依赖 将依赖的资源文件的生成操作设置为内容 2.2.2类库依赖 我所谓的类库依赖是指,我们有2个程序集,名字分别是Data,Data.

  • 如何关闭 iPhone的“Automation Running”滚动?

    【背景】当我们使用 WebDriverAgent进行iPhone的真机调试或者环境配置之后,iPhone手机上会出现一个没有图标的“ WebDriverAgent ”, 如下所示:     点击它之后,iPhone手机桌面上会出现一个透明浮层,并有文案: AutomationRunning Holdbothvolumebuttonstostop       【关闭方法】 它提示的很明白:Holdbothvolumebuttonstostop,即通过同时按住(+-)音量按钮可以关闭/停止。

  • 我来教你用AWS IoT.Part1--配置和接入

    AWS的IOT服务在中国区才开放。由于工作原因需要简单试用评估。写一下自己简单试用的流程,供其他人参考。 直接贴流程 1.先注册一个类型(这里“类型”相对于编程,可以理解为父类,里面可以添加一些可继承的熟悉)   2、注册一个事务(这里可以理解为注册一个设备、一个智能网关、一个传感器、一个智能设备)     3、创建策略(由于默认使用MQTT,所以这里的策略可以简单理解为限制某些topic或者行为的规则) -------------接下来的操作可能与AWS文档有所出入,但能保证实验成功,仅供参考-----------------------  4、生成证书   从这里开始,和AWS的文档有所出入。可以先将4个文件下载,但接下来只会使用到Symantec的CA 5、对刚才注册的设备进行连接测试 点击注册表-事务-选择已创建的事务-交互-右上侧连接设备-windows-java(这里根据自己的实际需求选择),下载工具包。   记事本打开start.ps1,最后一段话,就能得到BrokerAddress,证书和秘钥的名

  • 微软Power BI 每月功能更新系列——2021年4月版本功能更新全面解读

    ​   欢迎阅读PowerBI4月功能更新摘要! 1.对PowerAutomate视觉效果官方提供预览功能! 2.针对PowerBI数据集和AzureAnalysisServices的小倍数和DirectQuery的预览功能又有所新增。 3.官方将对PowerBIDesktop中的图形进行重大改进,并引入一种新的,更轻松的共享报告的方法。 4.对灵敏度标签的增强为您的数据提供了更好的保护。           报告   PowerAutomate可视化对象 (预览) 这个月,官方宣布PowerAutomate首次作为一个视觉对象嵌入PowerBI。 很多时候,最终用户在探索PowerBI报告时希望根据他们发现的见解采取行动,创建者也希望在不借助外部工具的情况下,为其用户提供内置的自动化(例如,发送便签,创建任务,复制数据)。借助这种新的PowerAutomate视觉效果,最终用户可以在PowerBI报表中全部运行自动化流程。此外,执行的流可以是数据上下文的,这意味着基于最终用户设置的过滤器流输入可以是动

  • Using View and Data API with Meteor

    ByDanielDuIhavebeenstudyingMeteorthesedays,andfindthatMeteorisreallyamind-blowingframework,Icantalkaboutthislatter.IwasinspiredbythisquestiononforumandstartedtolookingatthepossibilitiesofusingViewandDataAPIinMeteor.SincethewayofMeteorworksissodifferent,Ihavetosaythatitisnotpleasantexperiencetodothatespeciallyforameteorstarterlikeme.Anyway,afterstrugglingfordays,tryingthisandthat,Ifinallymadeasimpleworkingsiteanddeployeditashttp://lmv.meteor.com.InthispostIwillwritedownhowIdidthis,hopefullyitishe

  • Mybatis-03

    Mybatis   我们在进行了简单的CRUD操作后,开始了解并使用Map查询以及模糊查询 Map查询   Map查询一般用在实体类或数据库中表有太多的参数的情况,因为Map可传可变参数,局部修改   代码演示: 接口: //Map查询 UserInfogetUserById(Map<String,Object>map);复制 SQL语句:这里要切记,但凡使用了Map的参数,一定要表明参数类型为Map <selectid="getUserById"parameterType="Map"resultType="com.charles.pojo.UserInfo"> select*fromuserinfowhereiduserInfo=#{iduserInfo} </select>复制 测试类调用: @Test publicvoidgetUserById(){ SqlSessionsession=MybatisUtils.getSession(); UserMappermapper=session.getMapper(UserMapper.cl

  • Windows Phone,爱过

    本文于2019年01月23日首发于IT之家。 地址:点击这里 记得有时IT之家发布关于Windows10Mobile系统更新的消息的时候,总会有读者在评论区里开玩笑说: 有些系统活着,但它已经死了,有些系统死了,但它还活着。 尽管从2017年10月份进入维护期起,Windows10Mobile就被判了死刑,不过在这之后,微软却一直坚持为其提供更新,直到Windows10Mobile的生命周期结束为止。 ▲微软Lumia950 1月9日,据IT之家报道,微软宣布将于2019年12月10日结束对Windows10Mobile的支持,这意味着这款系统最终的命运已经尘埃落定。在上一篇文章中,我们已经讨论过微软当年是否坑了诺基亚,而今天的这篇文章,我们的话题是,WindowsPhone是如何一步一步走到今天的。 Windows10Mobile为何终止支持 在Windows10中,微软采用了一种新的迭代规则,即“Windows即服务”。 在这种迭代规则下,处于常规更新通道的Windows10将会得到每年两次的功能更新和大约每月一次的质量更新。 针对每次功能更新,微软将为其提供18个月的质量更

  • php array_walk 和 array_reduce函数

    1.array_walk:将数组中的元素(键+值)依次取出传给处理的函数,函数处理完就完了,没有返回值.复制     $arr1=array( 'name'=>'zhangsan', 'age'=>300, );复制 array_walk($arr1,function($val,$key){ echo'参数:'.$key.'值:'.$val.'<br/>'; });复制 结果:复制 参数:name值:zhangsan参数:age值:300 复制 复制 2.array_reduce:将数组中的元素依次传给处理的函数,处理的函数会返回一个最终的结果,作为array_reduce的返回值.复制 $arr2=array( array('id'=>1,'name'=>'lilei'), array('id'=>2,'name'=>'tom'), array('id'=>4,'name'=>'hanmei') );复制 //获取上面数组的所有id,放到一个数组中复制 functionarray_id($arid,$

相关推荐

推荐阅读