摘要:
首先这道题很容易发现如果已经知道了最后的答案序列,那么操作顺序是无所谓的 所以我们可以假设从头操作到尾 由于题目给的是非严格递增序列,我们猜想最后的答案一定是一段一段的,段与段之间单调递增 比如1 1 1 2 2 2 2 2 3 3 4 5 5 反证:如果最终的答案序列存在\(a_{i}\)和\(a 阅读全文
摘要:
无论是.h还是.cpp,都可以写声明或者实体,而且.h和.cpp的前面的名字相同不相同没有任何的影响 最终一系列要连接的程序中,必须有且只有一个源文件有main函数,然后从这个main函数开始运行 include的作用其实是跟define一样的,是纯文本替换 进行替换之后,如果替换的内容是实体,那么 阅读全文
摘要:
上面第二个参数为啥又有星号又有方框?这其实是一个指针数组,包含若干个指针,每个指针指向一维字符数组 另一篇文章:命令行 阅读全文
摘要:
我们考查对任意一种方案答案的构成 假设最终方案只有这三段 那么很显然,答案为$$(S+sumT_[i])\cdot sumC_{i}+(2S+sumT_[j])\cdot (sumC_{j}-sumC_{i})+(3S+sumT_[n])\cdot (sumC_{n}-sumC_{j})$$ 我们换 阅读全文
摘要:
这一道题给我们最大的启示就是一定要学会固定数字!下面要求的数组,如果按照数位DP的套路,从小到大考虑数位以及数位上的数字,是很容易想到需要求这些数组的 设\(Pow[i]=B^i\),\(f[i]=\sum_{k=0}^{i}{B^k}\) \(h[i]\)表示所有\(i\)位数字的所有前缀子串的和 阅读全文
摘要:
这个trick是:将所有时间转换为秒,就不用考虑进位了 阅读全文
摘要:
首先,\(max(p,q)\)是下界,因为连一条边最多只能减少一个零入度点和一个零出度点,而最终的图不可能有哪怕一个零出度点或者零入度点(最后的图刚好就是一个点) 根据这个下界,我们也很容易可以构造出来一种方法,让零出度点和另一个SCC的零入度点相连即可,就像下面一样(红色边是添加的边) 阅读全文
摘要:
具体题解先看这一篇 解释一下是如何合并树的 每次都可以提取出来一个子树 然后把这三棵子树重叠在一起(根对根,\(2\)号点对\(2\)号点,以此类推),就得到了这个新图 然后解释一下为什么这么做是对的 首先在单次操作中,至少需要把这个新树给遍历完,不然的话就会存在有些点遍历不到,即这是答案下界 然后 阅读全文
摘要:
首先我们抽象一下这道题的模型,然后把引理记住 模型:对于一棵树上选定的一些点,把他们连通起来的最小边数 我们先考虑一种朴素做法,对于任何一种方案,任取其中两个点,那么这个方案一定包含这两个点之间的路径 就是说,我们依次添加每个点,对于每一个新添加进来的点,让这个点与其已经添加的点求路径,然后把路径上 阅读全文
摘要:
主要是性质的证明,见这篇题解 其他的性质证明都很容易看懂,主要是记住:所有直径的点的交集非空,所有直径的中点相重合 然后来证明一下为什么随便选一条直径就可以了 我们先画出图 由之前的定理的证明,所有直径一定长成这个样子。就是从中点\(m\)开始往左右两边走,走到拐点时可以选择走支路也可以选择继续走, 阅读全文
