首页 > 其他分享 >11.20 模拟赛

11.20 模拟赛

时间:2024-11-20 20:09:24浏览次数:1  
标签:sz le log 复杂度 11.20 dfs times 模拟

总结

完啦 A 不会做。肯定是神秘贪心题。不太好模拟啊。

算了猜个结论吧。\(m=1\) 是经典问题,把这个稍微引申一下。得到了一个 multiset 维护的做法。

然后猜对了。15min 切掉。很快码了一个对拍然后一直拍到比赛结束。

看 B。感觉不难。尝试设计 DP。

发现我啥也不会,所以先写个暴力找规律吧。

法克,暴力咋写。先跳吧。

C 一眼不可做啊。基本上没怎么想。看 D。

\(20\) 分不难。暴力排个序就好。\(n=2000\) 平方带 \(\log\) 能过吗?……时限 6s 那没事了。

想想性质 A。这不暴力,每次求个区间内的后继,然后最多只会跳 \(\log\) 次吗?主席树启动!

然后 \(60\) 到手。好水啊。

正解是不可能的。润了。回到 B。

稍微画了几个图模拟了一下,差不多在 10:50 左右的样子得到了一个很劣而且很没前途的解法。复杂度未知,大概能得 \(55\) 分。

写了很久,中间的关键部分重构了三四次。发现是 \(\mathcal O(n^5)\) 的。或许 \(40\) 分。

但是样例不过啊。调了很久(差不多在结束前 10min)过了样例。

结果跑得很快啊。最后一个大样例只跑了 6s。卡常启动!

然后时间太紧了只卡到 4.9s。不管了交吧。

\(100+60+0+20\)。T4:if (l1 == r1 && l2 == r2)

总结

好的:

  • T2 写完+调完了。虽然和正解 几乎没有关系

不足:

  • T4 若只错误。白丢 \(40\)。
  • 基本没给 T3 的思考时间。

知识

T1:贪心,mutiset

T2:DP,组合

T4:复杂度分析,主席树

题解

A. 机械师 II

贪心。数据结构维护当前每个机械玩偶已经解决的 \(r\) 最大的事件。将事件按 \(r\) 排序,每次找到数据结构中 \(\le l_i\) 的最大的机械玩偶,让它做 \(i\)。找不到就跳过这个事件。

不难发现这个数据结构可以是 multiset

B. 守墓人

首先求 \(f(u)\) 表示 \(u\) 的子树有多少种 dfs 方法。不难发现:

\[f(u) = |son_u|!\times \prod_{v \in son_u} f(v) \]

显然一个子树内的点在 dfs 序上是连续的。或者说,遍历到 \(u\) 后,接下来遍历的 \(sz_u\) 个点一定是 \(u\) 的子树。

画个小图。比如我们想求 \(v\) 的答案。

那么 dfs 序一定长这样:

其中两个蓝色括号里,一定会填上 \(1,3,4\) 这些子树。比如:

此时还有一段前缀和一段后缀未确定。因为这些点是 \(u\) 子树外的。

于是我们可以只对子树外的点的顺序计数。令 \(g(u,x)\) 表示 dfs 序第 \(x\) 个位置是 \(u\),这个前缀和后缀的方案数。显然答案为 \(g(u,x) \times f(u)\)。

如何转移?考虑 \(g(u) \to g(v)\) 的转移。

分别枚举 \(u\) 在 dfs 序中的位置和 \(v\) 在 dfs 序中的位置,不妨设为 \(i, j\),且 \(i < j\)。

根据上面说的,\([i+1,j-1]\) 这一段肯定要填上 \(\{1,3,4\}\) 的子集的子树。剩下的要填在后面。dfs 序中剩下的位置已经被 \(g(u,i)\) 考虑了,不用管它。

还是这张图。如果这样填:

那么转移条件是 \(sz_4+sz_1=j-i-1\)。然后 \(g(u,i) \times f(4) \times f(1) \times f(3) \to g(v, j)\)。

显然这一坨 \(f\) 的乘积可以最后一块考虑。我们只需要考虑 \(f(u,i) \to f(v,j)\)。也就是求有多少个 \(\{1,3,4\}\) 的子集的 \(sz\) 和为 \(j-i-1\)。

这是一个背包问题。对于一个 \(v\) 而言,计算这个答案的复杂度是立方级别的。也就是总复杂度 \(\mathcal O(n^4)\)。

注意到子树 \(2\) 的根对应的这个集合是全集(\(\{1,2,3,4\}\))去掉一个元素。于是考虑先对全局做一遍背包,然后每次退掉一个元素。也就是 P4141消失之物 了。

提交记录 #719496 - 梦熊联盟

D. 先知

考虑这样操作:

  • 找到 \([l1,r1]\) 中的最大值 \(x\)。
  • 找到 \([l2,r2]\) 中最大的 \(<x\) 的值 \(y\)。
  • 如果 \(y \ge \lfloor x / 2 \rfloor\) 则说明答案为 \(x+y\),直接退出。
  • 否则,找到 \([l1,r1]\) 中最大的满足 \(\lfloor x' /2 \rfloor \le y\) 的 \(x'\)。如果 \(x' > y\) 则说明答案为 \(x+y\),直接退出。
  • 否则,\(x \gets x'\),回到第二步。

正确性显然。

复杂度为啥正确?

如果第三步没有退出,一定有 \(y < \lfloor x / 2 \rfloor\)。如果第四步没有退出,一定 \(x' \le y\)。也就是说如果这一轮没有结束那么 \(x\) 一定减少一半。

所以复杂度是 \(\log\) 的。

找区间内一个数的前驱可以主席树。总复杂度 \(\mathcal O(n \log V \log n)\)。

标签:sz,le,log,复杂度,11.20,dfs,times,模拟
From: https://www.cnblogs.com/2huk/p/18559183

相关文章

  • 【c++丨STL】stack和queue的使用及模拟实现
    ......
  • 11.20闲话-存档
    存档参考使用没有存档的软件,就像吃饭不给容器一般。故存档必然是极为重要的。下面介绍Unity的几种存档方式。代码出处Part.1——PlayerPrefs应该是最简单的存档方式。但局限性也是显然的,只能存储int,float,string三种类型,就像在文件中存储了三个map<string,int/f......
  • 2024.11.20 NOIP模拟 - 模拟赛记录
    异或(xor)每次所加三角形的范围如图所示:这道题做法较多,我是通过两组差分与前缀和来做的。首先需要一个三角形差分,使每一次在差分数组中修改时,影响到的范围是一个三角形,比如这样(红色点为\((x,y)\),即\((r,c)\)):假设我们真正需要修改的三角形是橙色部分:那么联系到正常差分,很容......
  • 1-2模块电源电路(11.20)
    DCDC模块电源常用电路:变换器作用:进行电压转换、保证所需的相关输出电容恒流:C三角U=IT;电感恒压:L三角I=UT;V0/Vim=D(1-D);三种非隔离开关电源:降压、升压、升降压电路三种隔离开关电源:反激型变换器、正激型变换器、桥式变换器、反激型:实现多路输出、输出波形电流、控制输......
  • 2024.11.20总结
    本文于github博客同步更新。A:一个数可以被操作当且仅存在一列的顶部元素为它且存在一列的底部元素为它,初始扫一遍,将合法的元素以顶部所在列为关键字扔到小根堆里,每次找到最小的元素添加,然后检查将新露出来的元素是否存在匹配,若结束时未填完即为无解。B:要么在非环边上砍一刀,......
  • NOIP 模拟 8
    A星际联邦直接贪,对于每个点,连前缀max,后缀min,再把前缀max和后缀min连,直接跑kruskal就行,因为对\(i\)连,确保了最小,然后再连确保了连通性。正解是无脑菠萝,维护不在同一连通块的最值和次值就行。#include<bits/stdc++.h>#defineintlonglong#definefifirst#define......
  • 11.20 CW 模拟赛 赛时记录
    看题前言:花了\(10\rm{min}\)把昨天的题调了一下,神经\(\rm{T1}\)艹,再一次缺失大样例神秘博弈放\(\rm{T1}\),大抵可做(主要原因是\(\rm{lhs}\)键盘敲得框框响)手玩几组数据大概能做,后面再认真看\(\rm{T2}\)看到树直接小命不保喵了个咪的,这我打鸡毛啊又......
  • 11.19 CW 模拟赛 T3.又见 LIS
    前言老登你也知道你又在出\(\rm{LIS}\)算法首先我们需要注意到,本质上和随机了一个\(1\simn\)的排列没有任何区别具体的,任意一个\(\rm{LIS}\)数列,都仅仅是由大小关系推过来的,并且可以证明,\(\rm{LIS}\)数列相同,当且仅当大小关系完全相同注意到这个之后(事......
  • 2024-11-20模拟赛
    前言:无需多言,8:00~10:00\(4\)小时\(IOI\),ABC198,264C、D、E\(6\)道题。以下顺序按照开题顺序:T1ABC198C-CompassWalking:一眼感觉非常的结论,开始分讨。\(10min\)后过样例了,交,似了;开\(longlong\),交,似了\(2\)个点。(漫长的查错时间)。感觉是精度问题,换成\(double\)......
  • 11.20日课堂笔记
    Listitemjava.trim是jQuery库中的一个函数,用于去除字符串两端的空白字符(包括空格、制表符、换行符等)。这个函数在jQuery1.2.6版本中被引入。$.trim函数的语法如下:$.trim(str)其中str是要处理的字符串。使用$.trim函数的例子:varstr="Hello,World!......