摘要:
问题分析 首先不难想到是虚树。建完虚树需要保持节点间原先的距离关系。 然后总距离和最小距离用树形DP求,最大距离用两遍dfs即可。注意统计的时候只对关键点进行统计。 ~~真是麻烦~~ 参考程序 ~~ac的时候是loj上速度最后一页,代码第四长的……~~ c include using namespa 阅读全文
摘要:
问题引入 "SDOI2011消耗战" 虚树 按照朴素的做法,就是对于每一个询问都跑一边DP。 $$ Dp[i] = Dp[ i ] + \min( Dp[Son],Cost[i,Son]) \,\,\,(Son不为关键点)\\ Dp[i] = Dp[ i ] + Cost[ i, Son ] \,\ 阅读全文
摘要:
"题目链接" 问题分析 显然是虚树题。由于$\sum k\leqslant 500000$,所以直接套个虚树就好了。时间~~经过实践是可以的~~。 参考代码 阅读全文
摘要:
"题目链接" 问题分析 奇奇怪怪的题。。。 首先思路达成一致,从大到小一步一步确定位置。 我们一边分析,一边讲算法。 假设我们现在要找的是这个串中的倒数第二个位置(就是1),我们可以这样做: 首先,我们~~想象着~~把串分开,变成 由于我们发现, 最后一个数字 位数相同 的串 的长度 是一个等差数列 阅读全文
摘要:
win下直接就有gvim8.1.exe安装。但linux下直接从apt get里面下载的vim都是远古版本,需要手动编译安装。 首先,下载vim源代码 如果下载不成功,可以试试通过gitee (2019年9月版本): 或者通过www.ipaddress.com获取ip,然后修改hosts 然后 首先 阅读全文
摘要:
"题目链接" 问题分析 其实是比较明显的动态DP。 懒于再推一遍式子,直接用 最小权点覆盖=全集 最大权独立集,然后就和 "这道题" 一样了。题解可以 "看这里" 。 然后必须选或者不选的话,就直接把相应的点权变成$ \infty$或$\infty$就好了。如果是必须选,最后答案里不要忘了加回原来的 阅读全文
摘要:
[TOC] 前言 ~~最后一届NOIP~~TG的day2T3对于动态DP的普及起到了巨大的作用。~~然而我到现在还不会~~ 开始 "SP1716 GSS3 Can you answer these queries III" "题解位置" 这道题的题目大意就是维护动态序列最大子段和。一个比较显然的想法 阅读全文
摘要:
"题目链接" 问题分析 解法一 简单的一道线段树维护$lmax,rmax,max,sum$即可。 解法二 考虑动态DP。 $$ \begin{aligned} \left [ \begin{matrix} a_i& \infty&a_i\\ a_i&0&a_i\\ \infty & \infty & 阅读全文
摘要:
"题目链接" 问题分析 区间求异或和最大,比较自然的想到了线性基。而每次求一个区间的线性基显然是行不通的。我们考虑在每个位置求出首位置到当前位置的线性基。同时我们要使线性基中高位的位置所选的数尽量靠后。这样我们维护线性基的时候在同时维护一个位置信息就好了。 参考程序 阅读全文
摘要:
"题目链接" 问题分析 首先可以想到,坐标和为奇数的位置可以被唯一确定。同样的,如果假定$(1,2)$是$0$,那么坐标和为偶数的位置也可以被唯一确定。这样总共使用了$n^2 3$次询问。 那么接下来就需要在$3$步之内判断是否要翻转坐标和为偶数的位置。 如果仅仅只是这样简单的判断: c print 阅读全文
摘要:
"题目链接" 问题分析 直接按边从小到大加入,求所有的连通点对数量即可。最后离线询问。使用并查集维护Size。 参考程序 c include using namespace std; const int Maxn = 200010; const int MaxAlpha = 200000; stru 阅读全文
摘要:
"题目链接" 问题分析 题目实际上是一堆大于等于的约束。观察这$2n 2$个约束。第一组可以将要求的排成一个不降的序列,然后第二组就是在第一组的基础上再添加条件。 不妨设第一组生成的不降序列是$\{a_i\}$,然后添加的条件是$a_i\leqslant a_j$。那么显然,$ij$,就代表着$i$ 阅读全文
摘要:
"题目链接" 问题分析 由于三个字母是等价的,所以大致可以分为如下几种情况: aa, ab ab, ac ab, ba ab, bc 不难发现,第$3$中情况可能造成无解($n 1$时),而剩下的情况都可以由$aaabbbccc$或$abcabcabc$这样的串解决。所以直接枚举$3$个字母的全排列 阅读全文
摘要:
"easy version" "hard version" 问题分析 直接从hard version入手。不难发现从一个数$x$能得到的数个数是$O(\log x)$的。这样总共有$O(n\log n)$个数。然后对每一种数开一个大根堆维护前$k$个就好了。 参考程序 c include using 阅读全文
摘要:
[TOC] 古典概型 定义 $$ P(A)=\frac{m}{n} $$ m:A包含的基本事件数。 n:总基本事件数 基本事件:样本空间中不可再分的最小事件。 符号 $\Omega$ 表示样本空间。$\Phi$ 表示不可能事件。$\overline {A}$ 表示 $A$ 事件的对立面, $AB$ 阅读全文
摘要:
[TOC] $$ \newcommand{\arccot}{\mathrm{arccot}\,} \newcommand{\arcsec}{\mathrm{arcsec}\,} \newcommand{\arccsc}{\mathrm{arccsc}\,} \newcommand{\d}{\math 阅读全文
摘要:
"TJOI2009 猜数字" "HDU 1573 X问题" [TOC] 中国剩余定理CRT 中国剩余定理是用来求线性同于方程组的。 $$ \begin{aligned} \left \{ \begin{matrix} x \equiv c_1 (mod \,\,m_1 )\\ x \equiv c_ 阅读全文
摘要:
"题目链接" 问题分析 可以先任意选$3$个数,然后减去三点共线的部分。 三点共线又分$2$种情况: 横的或者竖的。这一部分方案数是$n\times{m\choose 3}+m\times {n\choose3}$。 斜的。不妨设线段一个端点在$(1,1)$,另一个端点在$(i,j)$,$i,j 1 阅读全文
摘要:
"题目链接" 问题分析 没有想到母函数的做法…… 其实直接看题思路挺简单的。发现如果每种花都有无限多的话,问题变得十分简单,答案就是$s+n 1\choose n 1$。然后发现$n$只有$20$,于是大力容斥一波就完事了。 参考代码 c include const long long Max_n 阅读全文
摘要:
"题目链接" 问题分析 题意就是求随机取$3$条边能组成长方形的概率。其实可以看做求方案数。 不妨将边长从小到大排序,得到$a_1,a_2,\cdots,a_n$。考虑枚举三角形边长中最大的一条$a_i$,那么$a_i$作为最大边时贡献就是$a_1,a_2,\cdots,a_{i 1}$中两项加起来 阅读全文
摘要:
问题分析 不难想到用母函数做。 令自变量$x$的次数就是单词价值,那么答案就是$x$的$1$次到$50$次的系数之和。由于我们只需要处理前$51$项,所以暴力多项式相乘即可。 举个例子,第一组样例的母函数就是: $$ G(x)=(1+x)(1+x^2)(1+x^3)=1+x+x^2+2x^3+x^4 阅读全文
摘要:
更好的阅读体验可以到我的github下载PDF。 前言 本笔记由chy-2003整理于上海交通大学发布于coursera的离散数学课程。讲师龙环。 不保证内容十分全面,但至少与课程内容保持一致,同时添加或删减了某些样例和引入。 定理或命题下方的块没有特殊标注即为证明。 如果发现文章内容错误,请联系 阅读全文
摘要:
"题目链接" 问题分析 题意即求两个凸包间的最小距离。 一开始十分暴力地写了一个闵可夫斯基和,后来发现变种的旋转卡壳转一转就好了QAQ 闵可夫斯基和的思路十分简单,下面看一下旋转卡壳的做法: 不难发现两个凸包间的最短距离一定像上图那样。所以我们只需要枚举一个凸包的边,找另一个凸包上的对踵点就好了。这 阅读全文
摘要:
"题目链接" 问题分析 假的题目,假的数据…… 不可能有少于$O(n^2)$的做法的,少于$O(n^2)$的做法是不可能的。 然而由于假的数据,凸包上的点只有不到$3000$个,所以$n^2$就好了…… ~~秘技是语言选C++而不是G++~~ 参考程序 阅读全文
摘要:
问题分析 求平面最远点对。凸包+旋转卡壳。 WA了5发是因为自作聪明认为找对踵点可以直接看两个点,保持距离最大……然后被下面这组数据叉掉了…… 所以还是老老实实地写吧…… 参考程序 ~~有压行嫌疑~~ 阅读全文