1.CF1860D

link && submission

发现自己并不会处理纯纯的 dp 甚至自己根本不会dp!

定义 dp_{i,j,k} 状态表示前 i 个字符有 j 个 0, 01 的数量减去 10 的数量为 k 。转移比较显然了,答案是 \(dp_{n,cnt0,0}\) ,其中 cnt0 是原序列中 0 的个数。注意 k 有正负。

2.CF1860F

link.

首先很原神的一个转换是因为正整数所以可以转换成 a+bx,然后就可以看成一条直线了,特征值放进去就可以看成一个点。那么特征值只会在直线相交的地方改变,最多只会有 n^2 个点。枚举每个点,现在只需要考虑如何快速查询括号序列是否合法,将左括号看成 1 然后右括号看成 -1 再判断是不是所有的前缀和都大于 0 就行了!数据结构可以直接线段树扫描。

没有代码是因为官方题解的代码太妙了!

3.CF1864E

link. && submission

性质题,二进制后从高到低讨论什么时候会有人说不知道。发现当前这个人说不知道时一定是 s 的当前位为 1 且这个人所拥有的数的当前位是 1。接下来,如果另一个人的当前位也是 1 ,那么就直接到下一个 1 位,否则直接另一个人就已经知道谁大谁小了。粗略地发现两个数之间比较的次数也许和二进制后 1 的个数有关。

接下来换个方向思考问题,考虑当 Alice 拿了某个数 a 的时候,其他数合起来需要多少的次数。假设另一个数是 b 。我们把这两个数二进制串分别写为 SA 和 SB ,S 是他们相同的前缀。不难发现在S之后的第一个不同的地方两者就能分出大小。因为是前面相同的部分的长度会对两个数的比较产生贡献,并且不会结束比较,这引导我们考虑 trie 树。特判两个数相同的情况,接下来只需要考虑两数不同时的比较次数。剩下两种情况,第一种是 a>b,此时结束的位置一定是 a 从左到右第一个 b 没有的 1 的位置。然后根据奇偶此时可能是 Alice 或者 Bob 做出选择,可以发现 Alice 做出选择时次数需要多一次。然后讨论下去就好了。发现一个数与其他数的快速比较可以放在 trie 上,所以整体复杂度就做到了 \(\mathrm{O(nlog_n)}\)。

可以结合代码思考!跟官方题解不太一样就是了。

4.CF1864F

link&&sumbission

挺神仙的一种离线方式。

首先将值域在 [l,r] 的所有值拿出来。因为区间无交所以一定要从小到大把所有的值变为0,而且每种权值至少删一次,接下来考虑额外贡献。考虑如果两个相同的数中间出现比它们小的数,这两个数就无法同时删除。推广一下,每相邻的两个相同的数之间出现了比他们小的数就会增加贡献。如果说我们查询的区间是 [1,r] ,那么就很可做了。因为这时候我们只需要考虑每个小于 r 的数是否存在如上的额外贡献,但是发现查询区间有个左端点 l。你看啊,我们一开始发现查询区间为时 [1,r] 很可做,那么多了一个 l 的影响无非是 [1,l-1] 的数不在出现在序列上。第一个影响是这段的数不再对答案产生贡献,第二个影响是对于 [l,r] 的数不能再因为 [1,l-1] 的数产生额外贡献。对于第一个影响,我们可以将查询拆成 [1,l-1] 和 [1,r];对于第二个影响,如果两个相同的数之间比它们小的数大于 l 那么才能产生贡献,所以我们只需要用一颗支持查询区间最大值的线段树看看这个区间的最大值是否满足就行了。然后贡献可以看成是个前缀形势,需要快速修改和查询,再写个树状数组就好了。

5.CF232E

link &&submission

猫树!喵喵喵!所以叫猫树是因为很喵喵嘛/se 这道题算是猫树板子题了,所以这道题的重点是讲猫树!

猫树本质上是预处理,可以在 O(nlogn) 的时间复杂度里预处理出一个序列所有 [l,r] 的信息,要求维护的信息有结合律。查询是 O(1) 的。考虑建一棵线段树,那么任意一对 [l,r] 区间在线段树上最后一次出现一定是在线段树上叶节点 \(P_l,P_r\) 的 LCA 节点所在的区间上。这样就能保证每个区间会且仅会被线段树上的一个节点记录。对于每一个表示 [l,r] 的节点,如果我们能在 O(r-l+1) 的时间复杂度里面处理完这个节点所标记的所有区间,那么我们就能在 O(nlogn) 的时间复杂度以内完成所有区间的预处理。

考虑每个区间 [l,r] 的 mid,预处理出所有 [l,mid-1] 到 mid 的区间的信息 和 mid+1 到 [mid+2,r] 的所有区间的信息,然后把同层的节点合并成一个 [1,n] 的区间,在查询的时候找到 l,r 然后直接结合 [l,mid] 和 [mid+1,r] 的区间就好了(你可以直接吧这两个区间的信息挂在 l 和 r 的上)。 查询的时候不用关注 lca 是什么,只用关注 lca 的深度就行了。位运算的方法是 \(log_2x-log_2( x\oplus y)\) 就行了。

然后你发现这道题暴力查询,对每一列使用一个bitset优化的时间复杂度是 \(\mathrm{O(\frac{qnm^2}{w})}\) 的,但是发现可以猫树!所以时间复杂度被平衡为 \(\mathrm{O(\frac{nm^2logn}{w}+\frac{qm}{w})}\) 的。厉害吧。

666.[THUPC2022 决赛] 想象

link

整个花活(

但是但是我们 OIer 不能只做死题!要关心时事!

宣传下自己的花活喵

6.CF1720D2

link && submission

对 0-1trie 有了全新的认识。

这道题首先你他妈得知道看到异或想 0-1trie,因为我实在不知道怎么自然的想到这个。想到 0-1trie 后启示性的将问题转换到二进制每一位考虑。然后题目给的有点复杂,把 b 提出来后其实就是要满足:\(\forall i,j \in b,i<j,a_i \oplus j< a_j \oplus i\)。

那么你分到每一位上,发现可以用一个二元组存一下当前位的两个变量的状态,然后每一位的比较就很简单了。但是但是你这样直接建 trie 是四叉的!而且查询有可能会走两个方向!!

然后你发现什么情况需要再次递归,那么就是 \(a_i \oplus j= a_j \oplus i\) 你发现可以移项! \(a_i \oplus i= a_j \oplus j\) 这玩意儿莫名戳中我的笑点乐死我了,哈哈哈哈哈哈哈哈哈好好笑啊操。

所以异或相同的两种情况可以合在一个节点上,然后每个节点放两种状态进来分别的答案就好了。

7.CF1771F

link && submission

这题也是个好活。你看到奇数想到什么?没错,异或!但是直接用原数异或会有很多奇奇怪怪的错误,所以给每个值一个hash值然后在主席树上二分值域就好了。

8.AGC024E

link. && submission

神仙题!不知道是不是!但是我是常例的不会 dp !

换一下顺序,考虑怎么由 \(a_i\) 生成 \(a_{i+1}\),那么新插入的数一定要大于它后面的数。 假设现在我们生成到了第 \(i\) 个序列,用了前面 \(j\) 个数,然后现在插入的依然是 \(j\)。因为必须大于所以插入的位置是有限的,所以我们还需要限制一个 \(k\) 表示当前还可以插入的位置。dp 状态可以表示出来了 \(dp_{i,j,k}\) 表示生成到第 i 个序列,用了前 j 个数,有 k 个数小于 \(j\) 。这种定义下发现可以插入的位置是 k+1 个因为你可以在末尾补一个。

考虑转移。如果当前不插入 j 的话,那么相当于有一个本来可以插的位置但是你不插了,所以就是 dp[i][j][k-1]+=dp[i][j][k]。值得注意的是如果 k=0 那么说明当前这个数已经考虑完了所以转移是 dp[i][j+1][i]+=dp[i][j][k];如果插入 j ,那么一共有 k+1 个位置可以插,而且注意到插入后下一个数能插入的位置的数量并不会改变,所以转移是 dp[i+1][j][k] = dp[i][j[k]*(k+1)。

答案就是 dp[n][m][0]。

9.AGC040E

link && submission

妙!妙!

如果只有操作一,你发现答案就是 \(a_i>a_j\) 的数量。现在有两种操作了。那么考虑每一个位置的数由操作一贡献 \(b_i\) 和操作二贡献 \(c_i\) 。设置状态 dp[i][j] 表示第 i 个数,\(b_i=j\) 时的最小代价。显然的转移是:$$dp_{i,j}=\min dp_{i-1,k} +[j<k] +[j<k+a_i-a_{i-1}]$$ 是 \(\mathrm{O(nV^2)}\) 的,V 是值域。

这道题有两个 nb 的地方,第一个就是一开始的分拆转换,第二个就是优化 dp。\(V^2\) ——> \(logV\) 是什么概念?!第一个性质是 \(\mathrm{dp[i]}\) 这个序列是递减的,这个很显然;第二个性质比较隐藏,考虑用更新 \(\mathrm{dp[i][a_i]}\) 的最优点更新 \(\mathrm{dp[i][0]}\),那么真正的 \(\mathrm{dp[i][0]}\) 肯定不大于这个,所以就满足 \(\mathrm{dp[i][0]\le dp[i][a_i]}+2\)。

你发现整个序列 \(\mathrm{dp[i]}\) 的值被分成了三段。所以我们只需要对这三段 dp 就好了。找到每一段的位置可以固定左端点二分右端点。

10.ARC156D

link&&submission

好题。充分利用了异或的性质。

因为异或,所以一旦一个数出现两次就没了,所以如果所构造的序列 p 不是回文的,那么把这个 p 反过来就能让 \(\sum a_{p_i}\) 再出现一次,异或了就没了。所以能对答案产生贡献的序列一定是回文的。那么你直接每次截一半的贡献*2,再特判一下奇偶就行了。\(\mathrm{dp[i][j]}\) 表示长度为 i 的序列求和加上 j 的所有序列的异或和 ,这么定义的原因是奇数的回文中间可能会多出一个 j 来。

这做法才真正意义上对得起它所谓的 D 题难度,因为没什么深奥的理论了。

To_Heart—题解——好多好多!的更多相关文章

  1. SetForegroundWindow API函数还不够(好多好多解决方案,真是奇思妙想)

    好多好多解决方案: var Input: TInput; begin ZeroMemory(@Input, SizeOf(Input)); SendInput(, Input, SizeOf(Inpu ...

  2. To_Heart—题解——AT2165

    这是一篇解题报告 首先,看到标签,考虑二分答案. 我们二分答案(即塔顶的值),把大于或等于这个值的变为1,否则变为0. 很容易发现,如果塔顶的答案是1,那么就说明值可以更大,否则相反. 复制一波样例 ...

  3. 10.8 wtx模拟题题解

    填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...

  4. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  5. 题解-Railgun

    题面 Railgun \(T\) 组测试数据,每次给定 \(n,k\),求(\(F(i)\) 为斐波那契数列第 \(i\) 项): \[\sum_{1\le x_i\le n(1\le i\le k) ...

  6. Codeforces Round #529 (Div. 3) 题解

    生病康复中,心情很不好,下午回苏州. 刷了一套题散散心,Div 3,全部是 1 A,感觉比以前慢了好多好多啊. 这几天也整理了一下自己要做的事情,工作上要努力... ... 晚上还是要认认真真背英语的 ...

  7. HDU3065:病毒侵袭持续中——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=3065 ———————————————————————————— Problem Description 小t非常 ...

  8. Topcoder SRM 606 div1题解

    打卡! Easy(250pts): 题目大意:一个人心中想了一个数,另一个人进行了n次猜测,每一次第一个人都会告诉他实际的数和猜测的数的差的绝对值是多少,现在告诉你所有的猜测和所有的差,要求你判断心中 ...

  9. 题解报告:hdu 1263 水果

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营 ...

  10. Noip 2016 Day1 题解

    老师让我们刷历年真题, 然后漫不经心的说了一句:“你们就先做做noip2016 day1 吧” ...... 我还能说什么,,,,,老师你这是明摆着伤害我们啊2333333333 预计分数:100+2 ...

随机推荐

  1. Windows操作系统中常用的Dos命令

    打开CMD的方式: Win+R 输入cmd打开控制台(推荐使用) 在任意文件夹下,按住shift键,点击鼠标右键,选择在此处打开命令行窗口 在资源管理器的地址栏路径前面加上cmd+空格: 常用的Dos ...

  2. 眼观四海:自动驾驶&4D成像毫米波雷达 如今几何?

    写在前面 笔者做这项工作的目的是希望为课题组寻找毫米波雷达+智慧驾驶领域寻找可行的趋势与方向,尽可能贴近工业界需求.在这项工作中,笔者总结了以多级联(大陆,博世,森斯泰克等).集成芯片(Arbe,Mo ...

  3. 自然语言处理 Paddle NLP - 情感分析技术及应用-理论

    自然语言处理 Paddle NLP - 信息抽取技术及应用 定义:对带有感情色彩的主观性文本进行 分析.处理.归纳和推理的过程 主观性文本分析:技术难点 背景知识 电视机的声音小(消极) 电冰箱的声音 ...

  4. 基于C语言的泛类型循环队列

    循环队列多用于通信数据缓存中,尤其是在双方设备接收数据与处理数据不同步的情况下,使用循环队列先缓存通信数据,然后按照时间戳数据出队作出相应的处理,是一种比较合适的做法,在嵌入式编程中亦是如此.使用循环 ...

  5. 教程 | Datavines 自定义数据质量检查规则(Metric)

    Metric 是 Datavines 中一个核心概念,一个 Metric 表示一个数据质量检查规则,比如空值检查和表行数检查都是一个规则.Metric 采用插件化设计,用户可以根据自己的需求来实现一个 ...

  6. 11k+ Star 一款更适合中国用户的开源 BI 工具

    在当今数字化时代,数据分析和可视化成为企业决策和发展的重要支撑,很多 BI 工具昂贵的许可费用,让许多中小型企业用户和个人用户望而却步,开源 BI 工具的出现,让其成为很多用户进行数据分析展示的首选. ...

  7. php屏蔽非正常访问和检测用户登录检测

    <?phpnamespace Manage\Controller;use Common\Controller\DefaultController;class BaseController ext ...

  8. 规则引擎 ice

    目录 项目介绍 服务安装 创建数据库(MySQL) 下载安装 服务(启动.停止.重启) 打开后台 Client接入(Spring Boot) 示例 添加配置 新增 ICE liteflow 更适应我们 ...

  9. Flutter 屏幕采集如何实现(提供示例demo)

    在视频会议.线上课堂.游戏直播等场景,屏幕共享是一个最常见的功能.屏幕共享就是对屏幕画面的实时共享,端到端主要有几个步骤:录屏采集.视频编码及封装.实时传输.视频解封装及解码.视频渲染.一般来说,实时 ...

  10. 【环境搭建】docker+nginx部署PHP

    目的 使用docker容器完成nginx的安装以及部署PHP网页 步骤 一. 安装nginx 1. 拉取Nginx镜像 docker pull nginx //拉取镜像 docker images / ...