CF div3 995 (A~G)
期末周之第三把网瘾(真是越来越放肆了...)。这次赛时了一把div 3 , 又一次只做出了A~E,写完E后剩下的题没时间看了(受了些寝室噪音的干扰,最后二十分钟才出)。赛后看了下F和G,感觉也是一时半会儿做不出来的题,遂来补题。
ABCD
这次前四题都很白给。ABC纯模拟题,D是枚举左端点二分右端点的典套路。
不过BC的总共5发罚时确实有点说不过去了,这个和当时寝室比较吵,注意力不集中的关系比较大。以后在寝室打CF时应该提高一下专注力了。
E
用了树状数组 + 离散化过的。感觉这道题挺不错的,需要一点点的思维和代码实现能力。
题意就是给定\(n\)个区间\([a_i,b_i]\) ,然后有一个单价\(w\)。对于某个区间,当\(b_i>=w\)时,这个区间会被选,否则不会选;同时当\(w\)\(<\)\(a_i\)时,这个区间会收到一个差评(在题目中区间是一个商品。这里为了简化题意,就直接这样陈述了)。让你钦定一个\(w\),使得最后获得的总价值最大,并且差评数不超过定值\(k\)。
首先有一个很关键的性质:钦定的单价\(w\)一定是题中给定的某一个\(a_i\)或\(b_i\)。证明很简单:将所有\(a_i\)和\(b_i\)放在一起排个序。反证一下,如果\(w\)不是其中的某个数,则:
- 当这个数不超过其中的最大值时,一定可以把他扩大到比它大的且最接近于它的数。这样差评数和购买商品的数量都不会发生变化,合法性仍然保持的同时单价提高了,答案也会变得更优。
 - 当这个数超过了其中的最大值时,显然没有商品会被购买,总价值为\(0\)。
 
故可以\(O(n)\)枚举单价\(w\),答案一定在这些情况中的某一个。枚举时计算出当前情况下 购买的商品数 以及 收到的差评数 即可。
我赛时的思路是分别枚举\(a_i\)和\(b_i\),两种枚举分别用不同的方式来判断。
枚举\(b_i\)的判断方式:
将所有区间根据\(b_i\)降序排序,这样在枚举时(设当前枚举到的区间为\([a_i,b_i]\),\(w\)为当前枚举区间的\(b_i\)),所有买的物品一定是当前枚举物品的前缀,不买的物品一定是后缀。维护当前的前缀中所有\(<w\)的\(a_i\)的数量,这相当于带修的查找\(<k\)的所有数的数量,很明显是树状数组可以完成的事情。所以先将所有\(a_i\)离散化,并在枚举的过程中修改并查询即可。
枚举\(a_i\)的判断方式:
和上面的比较类似。将所有区间根据\(a_i\)升序排序,这样在枚举时(设当前枚举到的区间为\([a_i,b_i]\),\(w\)为当前枚举区间的\(a_i\)),后缀的区间都可以被购买且不会收到差评(\(a_i<b_i\));而前缀中,只要被购买的区间就一定会收到差评,但不是所有区间都会被购买。这样,就只需要在枚举\(a_i\)的过程中,维护前缀中所有\(<w\)的\(b_i\)的数量,这些区间都不会被购买。这样,剩下的\(i-1-notbuy\)个区间都会被购买且受到差评。结合后缀信息,总的差评数和购买数就均已知了。
总复杂度\(O(nlogn)\),常数应该比较大,但肯定可以过去。
F
模拟 + 分类讨论,赛后看b站讲解后过的。
直接 在脑海中构想 \(or\) 画图,容易发现Joker出现的位置会形成若干段连续的区间。具体来说:
- 当移动的牌不是Joker可能出现的位置时,Joker出现的位置一定是中间的一段连续区间。
 - 第一次移动可能是Joker的牌时,牌的前缀与后缀会出现Joker。
 - Joker出现的位置最多只会形成前缀,中间,后缀三段区间,证明不再赘述。
 
所以只需要维护三段区间的左右端点即可。前缀和后缀可以分别用\(above\)和\(below\)单独的指针来维护,中间的区间用\(Lmid\),\(Rmid\)两个指针来维护。模拟所有移动的情况,维护这四个指针的位置即可。注意区间相交时要把区间合并起来。
同时有一个坑点:第一次移动Joker时,若中间区间的长度为1,即只有一个Joker时,中间的区间会消失,即只会形成前缀和后缀两段区间,这个需要专门特判一下。当时自己在想这道题时除了这个坑点,其他的都没问题。还是得再细心一些。。。
G
状压\(dp\)。听完题解给的状态定义后,自己把 状态转移 和 预处理转移数组的方法 补出来了,也算是补得比较成功。
\(n <= 20\),毫不犹豫直接状压。
状态定义:\(dp[state][i]\)表示地图中只有二进制数\(state\)表示的全部蛇,并且最后一只蛇的编号为 \(i\) 时,在满足题述移动方式合法性的前提下,最右侧位置最近的格子是第几个。
状态转移:
dp[state|(1<<j)][j + 1] = min(dp[state|(1<<j)][j + 1] , dp[state][i + 1] + g[i + 1][j + 1]);
其中编号为 \(i\) 的蛇在已知序列中的最后一个,编号为 \(j\) 的蛇要加入到当前末尾后面的位置。
\(g[i][j]\)表示当 编号为 \(i\) 的蛇 和 编号为 \(j\) 的蛇 紧邻时,为了保证所有移动操作的合法性,二者需要间隔的最短距离。这个需要根据题目给定的移动序列预处理出来。
预处理\(g[i][j]\)的方法:
首先每只蛇在未经移动操作时至少间隔1个格,故初始化为1。
之后的 \(+\) \(-\) 号处理类似于栈的操作:所有的减号可以抵消掉它后面和它相关的加号。具体解释可能比较麻烦,可以看代码和注释来感性理解一下,还是比较好懂的。
哦对了,最后的答案应当取下式的最小值,而不只是\(dp\)数组的最小值:
dp[(1<<n)-1][i] + move_front[i] , 1 <= i <= n
其中\(movefront[i]\)表示第 \(i\) 条蛇向右移动的距离,即移动操作 \(i +\) 出现的次数。
CF div3 995 (A~G)的更多相关文章
- js如何使用正则表达式实现过滤HTML标签?(/<[^<>]+>/g)
		
js如何使用正则表达式实现过滤HTML标签?(/<[^<>]+>/g) 一.总结 js进阶正则表达式实现过滤HTML标签(<>标签中不能包含标签实现过滤HTML标签 ...
 - 12.27 cf div3 解题报告
		
12.27 cf div3 解题报告 wxy.wxy,带上分拉,全场做了个无脑小白 比赛场地 A: T1,跟着模拟就好了 B: sort一遍之后 去除的数一定是a[1]或者a[n] 比较去除谁小就输出 ...
 - js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)
		
js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...
 - js进阶正则表达式9量词2(^和&作用:/^HTML5$/g匹配不到aHTML5b中的HTML5,不然是可以匹配到的)(/\d+(?=cm)/g)((?!cm))
		
js进阶正则表达式9量词2(^和&作用:/^HTML5$/g匹配不到aHTML5b中的HTML5,不然是可以匹配到的)(/\d+(?=cm)/g)((?!cm)) 一.总结 ^和&作用 ...
 - js进阶正则表达式7点数字字母空格(w d s)(小写表原意,大写表反义)(特殊字符要加反斜杠:var reg22=/\W/g)
		
js进阶正则表达式7点数字字母空格(w d s)(小写表原意,大写表反义)(特殊字符要加反斜杠:var reg22=/\W/g) 一.总结 1.w d s,word digital space 2.特 ...
 - CF(协同过滤算法)
		
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
 - CF 363B One Bomb(枚举)
		
题目链接: 传送门 One Bomb time limit per test:1 second memory limit per test:256 megabytes Description ...
 - C++之路进阶——codevs2933(诗人小G)
		
2933 诗人小G 2009年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 小G是一个出色的诗人 ...
 - 在Windows/Ubuntu下安装OpenGL环境(GLUT/freeglut)与跨平台编译(mingw/g++)
		
GLUT/freeglut 是什么? OpenGL 和它们有什么关系? OpenGL只是一个标准,它的实现一般自带在操作系统里,只要确保显卡驱动足够新就可以使用.如果需要在程序里直接使用OpenGL, ...
 - Asp.Net Mvc: 浅析TempData机制(转发 作者: Tristan G )
		
Asp.Net Mvc: 浅析TempData机制 环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0 --------------------------- ...
 
随机推荐
- chrony服务器
			
1.安装 yum install chrony -y 2.配置文件 主配置文件:/etc/chrony.conf server ntp.aliyun.com iburst ---指定阿 ...
 - 全面解释人工智能LLM模型的真实工作原理(完结)
			
前一篇:<全面解释人工智能LLM模型的真实工作原理(三)> 序言: 本节作为整篇的收官之作,自然少不了与当今最先进的AI模型相呼应.这里我们将简单介绍全球首家推动人工智能生成人类语言的公司 ...
 - Nuxt.js 应用中的 prerender:routes 事件钩子详解
			
title: Nuxt.js 应用中的 prerender:routes 事件钩子详解 date: 2024/11/6 updated: 2024/11/6 author: cmdragon exce ...
 - Galera_Cluster_Mysql部署
			
前言 先来了解下它的身世,Galera Cluster是Codership公司开发的一套免费开源的高可用方案 官网为http://galeracluster.com.Galera Cluster即为安 ...
 - 使用yt-dlp下载youtube高清2k 60fps视频
			
只演示windows下的操作,linux和mac应该差不多的命令行. 首先放上github仓库地址:https://github.com/yt-dlp/yt-dlp 它的介绍: 厉害啊,支持数千个网站 ...
 - vue遇到Conflicting order. Following module has been added:(加载顺序冲突)
			
其中article.vue和topGroup.vue这两个文件在模块unitTest和wrongBook上出现加载冲突 其中一个文件先加载topGroup.vue文件其中一个文件先加载article. ...
 - java动态跟踪分析工具BTrace实现原理
			
今天,Team Leader推荐了一个非常棒的动态跟踪分析工具 – BTrace.由于对它的实现原理非常感兴趣,于是花了点时间研究了一下,顺便写点心得. 什么是BTrace? BTrace是SUN K ...
 - python之gevent
			
gevent 是一个基于协程的 Python 网络库,它使用 Greenlet 库提供了一种高效的协程实现. 协程是一种轻量级的线程,允许并发执行,但没有真正的并行性.协程可 以在遇到 I/O 操作时 ...
 - python之日常开发常用库
			
1. 配置文件解析(configobj) pip install configobj 基本使用: 配置文件 [server] name = zbj port = 9000 [home] # 注释 ar ...
 - spring cloud 使用nacos 作为配置中心
			
概要 nacos 可以作为服务注册发现中心,也可以作为配置中心,作为配置中心的时候,系统的配置可以做到自动刷新,即当配置服务器的数据发生更改时,客户端的配置会进行自动的更新. 实现步骤 1.修改mav ...