CF1841
题意:给一个长度为 \(n\) 的全是 \(1\) 的数列,Alice 先操作,Bob 交替。每次操作选择至少两个(可以更多)相等的数字,删除它们,在序列中加入它们的和。直到有人不能操作为止,这个人就获胜了。
问:谁有必胜策略?
很简单的结论题。
如果 \(n\geq 5\),Alice 把 \(n-2\) 个 \(1\) 合成为 \(n-2\),则 Bob 只能合成两个 \(1\),Alice 必胜。
\(n\leq 4\) 分别讨论即可。
题意:定义美丽序列为:可以选择一个前缀 \(i\in [1,n-1]\),把前 \(i\) 个元素移到最后的位置(这 \(i\) 个元素相对顺序不变),使得新序列单调不减。
给出一个序列 \(\{a\}\) 和一个空序列 \(\{b\}\),遍历数列 \(\{a\}\) 并执行如下操作:
如果 \(\{b\}\) 中加入 \(a[i]\) 后,依然是美丽数列,输出 \(1\) 并在 \(\{b\}\) 中加入 \(a[i]\);
否则输出 \(0\)。
美丽的序列应该满足下列条件至少一个:
单调不减;
由两个单调不减的序列拼接而成,且末尾元素 \(\leq\) 首位元素。
因此,我们用一个变量记录当前是否依然保持单调不减;如果已经不再单调不减,记录第一个单调不减的序列末尾位置,然后判断是否能加入新元素。
题意:给出一个由字母 A,B,C,D,E 组成的序列,每个字母依次代表 \(1,10,100,1000,10000\)。对于一个字符,如果它的右边有比它更大的字符,带负号;否则带正号。
整个序列的值就是每个字符对应的值乘以它的符号。
现在可以将一个位置上的字符更改,问:改后最大的值是多少?
考虑什么时候更改一个位置会更优。
增加。如果这个位置不是从左看第一个出现,一定不会最优,因为可以选择更左的同一个字符的位置。这样增加的量不变,且因增加字符而导致的减少不会增加。
减少,如果这个位置不是从右看第一个出现,一定不会最优,因为可以选择更右的同一个字符的位置。这样减少的量不变,且因减少字符而导致的增加不会减少。
所以,考虑更改每种字符出现的第一个和最后一个位置即可。
题意:给出 \(n\) 个区间 \([l_i,r_i]\),问:至少删除多少个区间,可以把区间两两分组,满足:
每组内的两个区间相交(只有一个点也算);
不同组之间的任何区间不相交。
考虑两个组 \(([l_1,r_1],[l_2,r_2]), ([l_3,r_3],[l_4,r_4])\),如何判断四对区间(第一组和第二组各挑一个)都不相交?
转换思路
这个太麻烦了,不如换个思路:考虑 \([l_1,r_1],[l_2,r_2]\) 和 \([l_3,r_3],[l_4,r_4]\) 的并集:显然,因为组内相交,并集也是一个段。这两个并集不能相交。
妙蛙!!
把给出的区间中相交的都算出并集线段,现在的目的就是在这些所有的并集线段中找出最多不相交的线段。
这是贪心的经典问题。左端点排个序依次选即可。
有一个 \(n\) 行 \(n\) 列的矩阵,行和列都从 \(1\) 到 \(n\) 编号。对于第 \(i\) 列,第 \(1 \sim a_i\) 个格子是黑色的,其余格子是白色的。
你可以把 \(1 \sim m\) 共 \(m\) 个整数放到矩阵里,满足两条规则:
\(\circ\) 每个格子包含至多一个整数。
\(\circ\) 黑色格子不能包含整数。
一个矩阵的美丽程度是满足这样的格子个数:该格子自身包含一个数 \(j\),且它右边与它相邻的格子包含的数为 \(j+1\)。
请求出矩阵的最大美丽值。
每一列的黑色格子把每行分成了若干白色段。
考虑放下连续 \(k\) 个数字,就有 \(k-1\) 个贡献。
可见,我们要尽可能选取较长的段,这样 \(-1\) 的次数就会变少。
现在的问题变成:如何求出每种长度的段有多少种?
考虑第 \(1\sim i\) 列的 \(1\sim a[i]\) 行,以这些格子为右端点的白色段。(这里右端点其实是 \(i-1\) 列,顶到了第 \(i\) 列的黑色格子)
以第 \(j\) 行第 \(i-1\) 列的格子为右端点的最长白段 的左端点,显然最靠右的 \(a[x]\geq j\) 的列 \(x\) 会 “拦下” 这个白段。
我们考虑用单调栈维护:
枚举 \(j\leftarrow1\sim a[i]\),如果当前单调栈的顶元素对应列的黑格数量 \(a[top]\geq j\),则 第 \(top\) 列可以拦下这个白段,把对应长度的白段数量加一。
否则 \(a[top]<j\),因为 \(j\) 是从小到大枚举,所以以后的 \(j\) 都不会使用这个 \(a[top]\);以后更新新的列也不会用到第 \(top\) 列,因为第 \(i\) 列不仅黑格更多,而且更靠后。于是直接 pop 掉。
补充
上面的过程其实可以简化:只要 \(top\le a[i]\),就直接 pop,在 pop 的一瞬间统计答案。
整个过程就只有维护单调栈的复杂度 \(O(n)\)。
随机推荐
- freeswitch配置SBC的方案
概述 freeswitch 是一款好用的开源软交换平台. 但是,fs不是专为SBC而开发的,所以需要做一些定制化的配置和开发. 本文主要介绍如何利用fs的基本功能配置一个简单的SBC方案,满足一般化需 ...
- shell脚本(15)-sed命令
文档目录一.sed-简介1.shell对文件操作介绍2.sed命令简介3.sed语法: sed [options] '{command}{flags}' [filename]二.sed-命令选项( - ...
- 如何使用photoshop修改图片的像素大小(分辨率)
查看原始图片的分辨率如下:640*399
- spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
本文为博主原创,转载请注明出处: 在spring cloud gateway 为 2.x 的版本的时候,可以通过引入 ribbon ,在进行过滤器 LoadBalancerClientFilter 进 ...
- netstat 命令查看端口状态详解
转载请注明出处: netstat 可以查看服务器当前端口列表及指定端口的连接状态等: -t : 指明显示TCP端口,t是TCP的首字母. -u : 指明显示UDP端口,u是UDP的首字母 -p : 显 ...
- [转帖]一文深度讲解JVM 内存分析工具 MAT及实践(建议收藏)
https://juejin.cn/post/6911624328472133646 1. 前言 熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手, ...
- [转帖]redis缓存命中率介绍
缓存命中率的介绍 命中:可以直接通过缓存获取到需要的数据. 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作.原因可能是由于缓存中根本不存在,或者缓存已经过期. 通常来讲 ...
- 关于decimal非常浅显的学习与整理
关于decimal非常浅显的学习与整理 背景知识 整数,小数,浮点,定点 整数(Integer)是没有小数部分的数值,可以是正数.负数或零.在计算机中,整数通常以二进制形式存储. 小数(Decimal ...
- [粘贴]TiFlash
TiFlash 是 TiDB HTAP 形态的关键组件,它是 TiKV 的列存扩展,在提供了良好的隔离性的同时,也兼顾了强一致性.列存副本通过 Raft Learner 协议异步复制,但是在读取的时候 ...
- [转帖]JMeter InfluxDB v2.0 listener plugin
https://github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin Support my Ukrainian Family ️ Lik ...