首页 > 其他分享 >个人题解:江苏省选 2019 第二轮

个人题解:江苏省选 2019 第二轮

时间:2024-02-29 22:33:06浏览次数:25  
标签:每个 题解 可以 小球 存活 2019 第二轮 mathcal 我们

精准预测

我们首先发现每个人每个时刻只有生死,所以我们可以建一个 2-sat 模型。每个人对应 \(T+1\) 个节点,表示这个人在每个时刻的生死。

那么,题目的条件可以直接在这个模型上面建图,还要注意第 \(t\) 秒死亡可推出第 \(t+1\) 秒死亡和第 \(t+1\) 秒存活能推出第 \(t\) 秒存活的两个隐藏条件。

这样子点数是 \(\mathcal O(nT)\) 的,不可接受。我们发现这张图有很多没用的点,我们只需要建出来:第 \(T+1\) 时刻的,或者被 \(m\) 个条件提及到的点即可。点数降至 \(\mathcal O(n+m)\)。

考虑计算答案,首先你不难发现建出的这张图是一个 DAG,假设 \(A(i,t)\) 表示第 \(i\) 个人在第 \(t\) 秒存活,\(D(i,t)\) 反之。那么如果 \(A(i,T+1)\to D(i,T+1)\),也就是第 \(i\) 个点不能存活,这样的点我们不管(至于怎么找见下文)。我们任务就是找出每个可存活的点 \(u\),\(A(u,T+1)\) 可以推出多少个可存活点的 \(D(*,T+1)\)。

首先这是 DAG 联通的问题,只能使用 bitset,但是直接开 bitset 开不下,这要求我们对分段求解。具体的我们每 \(B\) 个点一段,沿着拓扑序往回跑即可。

最终我们可以用一个 bitset \(ex\) 统计哪些点能够存活,我们只需要数 \(A(u,T+1)\) 和 \(ex\) 的与运算下的 \(1\) 个数即可。

取 \(B=2^{13}\) 可以通过。

神经网络

考虑哈密顿路径相关问题的经典做法:拆链。

考虑这个哈密顿路径和每棵树的交边,必然是若干的有向链。我们可以用 \(\mathcal O(k_i^2)\) 求出把这棵树划分成 \(i\) 条链的方案数。需要注意的是,除了单链,其他链都可以定向,有一个 \(2\) 的系数。

不妨假设我们已经钦定每个树贡献出来的链数,\(a_1,a_2,\dots,a_m\)。问题转化为:

有 \(\sum a_i\) 个有序小球,其中颜色 \(i\) 有 \(a_i\) 个。把这些小球排成一圈,要求相邻小球不同色,求方案数。

对于这个问题,我们可以容斥。具体的,我们把颜色 \(i\) 的小球钦定为 \(b_i\) 个链,假设这个容斥系数为 \((-1)^{a_i-b_i}H_{a_i}^{b_i}\),其中 \(H_n^m\) 是把 \(n\) 个小球排成 \(m\) 个有区别队列的方案数,\(H_n^m=n!\times\dbinom{n-1}{m-1}\)。这之后我们去掉了相邻小球不同的限制,我们就可以通过背包求了。

对于这道题,有一个颜色 \(i\) 有多种 \(a_i\),我们可以把这些 \(a_i\) 合并起来转移,复杂度是 \(\mathcal O((\sum k)^2)\) 的。

节日庆典

考虑 \(i\) 从小变大的时候,哪些 \(x\) 能作为预选答案。

首先不能存在 \(y\) 使得 \(S[y,i]\) 字典序严格小于 \(S[x,i]\)。这里严格小不能存在前缀关系。

你发现这样子预选答案还是很多。我们通过类似 border 理论的思想可以把这些东西变成 \(\mathcal O(\log n)\) 种。

你发现如果两个备选答案 \(x<y\) 满足 \(i-y>y-x\),那么这个时候,可以假设 \(S[x,i]=A\dots AB\),\(S[y,i]=A\dots AB\)(前者有 \(t\) 个 \(A\),后者有 \(t-1\) 个 \(A\))。

那你发现 \(S[y,i]\) 肯定不如 \(S[x,i],B\) 之一。于是 \(y\) 必然不能作为答案。

最后我们把预选答案集合缩成 \(\mathcal O(\log n)\) 个。我们只需要考虑如何快速比较这些被选元素的大小。即比较 \(x<y\),\(S[x,i]+S[1,x-1],S[y,i]+S[1,y-1]\) 的大小。

应为备选集合的条件,所以 \(S[y,i]\) 应该是 \(S[x,i]\) 的前缀,不需要比较。

剩下就是比较 \(S[x+(i-y),i]+S[1,x-1]\) 和 \(S[1,y-1]\) 的大小。你发现两坨东西都是形如一个子序列和前缀比大小的样子,你直接用 exkmp 处理出每个后缀和原串的 lcp,就可以 \(\mathcal O(1)\) 比较其大小了。

最后祝我、大家 GDOI2024 RP++,不要留下遗憾!

标签:每个,题解,可以,小球,存活,2019,第二轮,mathcal,我们
From: https://www.cnblogs.com/OtomachiUna/p/18045729

相关文章

  • 后端项目打包相关问题解决
    在对项目进行打包后,我运行jar包发现出现下面错误:nomainmanifestattribute,in"app.jar" 在“app.jar”中没有主清单属性说明jar包里面的META-INF/MANIFEST.MF文件中没有Main-Class这个属性于是我解压jar包,到META-INF/MANIFEST.MF文件中手动添加了Main-Class: com.xxx.xx......
  • 2024年2月29号题解
    P1014[NOIP1999普及组]Cantor表解题思路和之前的蛇蝎矩阵很像,因此可以先构建一个蛇蝎矩阵因为是z形所以在每个奇数次矩阵的对角线进行交换就可以了,这样就得到了我们需要的矩阵代码实现#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#inclu......
  • 题解 CF1709 XOR
    *2400*dsuontree一道很好的题目思路很巧妙传送门题目大意给出一棵树,\(n\)个节点,每个节点有权值\(v\),定义一次操作为修改任意一个节点的值为任意正整数,要求最后的树不存在任意简单路径使得路径异或和为\(0\)Solution一个很常用的套路,先钦定根节点为\(1\)定义\(w......
  • CF1265E Beautiful Mirrors 题解
    CF1265EBeautifulMirrors题解题目大意题目传送门你有\(n\)个点,当你在第\(i\)个点时,有\(p_i\)的概率到达点\(i+1\),有\(1-p_i\)的概率回到点1。当到达点\(n+1\)时,游戏结束。且期望进行的游戏次数。\(1\len\le2\times10^5\)。题目分析设\(f_i\)表示到达点\(......
  • VS2019 打包WPF安装程序
    说明最近开发了一个WPF的小工具,最初想发布成一个非安装版的可执行程序,发现有点困难,因为是基于.NetFramework4.7开发,还引用了一些其他库,WPF程序的运行是依赖.NetFramework环境的,所以必须提前安装。于是在官网上找到ClickOne的相关说明,可以把WPF打包成安装程序,当安装时会校......
  • P2606 [ZJOI2010] 排列计数 题解
    题意:求有多少个排列满足:对于每一个\(2\lei\len\),\(a_i>a_{\frac{i}{2}}\)。首先我们会发现这些数之间的大小关系形成了一个完全二叉树,因为每一个\(a_i\)都必须小于\(a_{2\timesi}\)和\(a_{2\timesi+1}\)。会发现本题的方案和每个位置具体的值并没有关系,而只......
  • 打击犯罪(题解)
    题目题目描述样例输入722531342242233167257256样例输出1关于本题这个题反着想会很简单,也就是复活犯罪,但是这个反着的思路不好想到(比如我就没想到)。看其他blog基本上都是反着来的,确实复杂度小不少,但是别人写过的我就不写了,我就给出正着来的解......
  • [ABC282Ex] Min + Sum 题解
    [ABC282Ex]Min+Sum题解题面传送门。题目要求有多少对\((l,r)\)满足\(1\lel\ler\len\)且\(\sum_{i=l}^{r}{b_i}+\min_{i=l}^{r}{a_i}\leS\)。考虑CDQ分治,那么我们需要不断寻找有多少对\((l,r)\)满足\(L\lel\leM<r\leR\)且\(\sum_{i=l}^{r}{b......
  • P9836 种树 题解
    题目传送门前置知识质因数分解。贪心。题解思路先来解决一个问题,统计一个数\(x\)的正因数个数。可以将\(x\)质因数分解,得到每个数在\(x\)的质因数分解中出现了多少次。都知道质因数分解是每个数的唯一分解,那么统计个数的时候就只需要枚举每个质因数的出现个数。所以......
  • CF510C Fox And Names 题解
    CF510CFoxAndNames题解https://www.luogu.com.cn/problem/CF510C思路题意就是:确定一个小写字母的比较规则,使得给定的所有字符串在一开始就是按你确定的比较规则排序了的。可以发现:对于前后一对字符串,找到第一对不同的字符,是要这两个字符有合法的大小关系,就能满足题意。......