摘要: 一眼看上去就应该能用半平面交去做。 首先考虑怎么求可能得第1名的人:每个人的函数为直线,就是在所有人的半平面交中的上边界者即可获得第一名,这个可以单调队列求解。 再考虑如何求可能得第2名的人:满足2个条件:1、在去掉可能得第1名的人后可以拿第1,这个跳转到上面的过程;2、至多同时被1个能拿第一名的人 阅读全文
posted @ 2019-05-09 10:32 hfctf0210 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 注:以下p[i]均表示概率 设F(x)为按i次开关后到达终止状态方案数的EGF,显然F(x)=π(ep[i]x/p+(-1)s[i]e-p[i]x/p)/2,然而方案包含一些多次到达合法方案的状态,需将其排除。n次操作回到原状态的方案数的生成函数G(x)=π(ep[i]x/p+e-p[i]x/p)/ 阅读全文
posted @ 2019-05-09 10:09 hfctf0210 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 好神的题啊! 看了这题只会第一个subtask,又参考了HN-CJ鸽王zsy的题解,实在太菜了。 暴力转移是O(nc2),很显然没有分。考虑子任务1,2,只需要转移包含已染色格子的列,然后状态数只有O(nc),对于关键两列(即有染色的列)间,只有5种状态。而这个可以初始化转移,转移讨论有点复杂,而且 阅读全文
posted @ 2019-05-08 21:29 hfctf0210 阅读(733) 评论(0) 推荐(0) 编辑
摘要: 通过子任务1、3十分显然,子任务4实际上就是线段树,和我下午写的[SDOI2015]道路修建一模一样,堪称“我抄我自己”,不会的可以先做一下这个题。 然后考虑正解,参考了zhoushuyu的博客,首先可以对前i列做MST,就是把前i-1列和第i列合并起来,而这时候只需要把第1和第i列的点作为关键点建 阅读全文
posted @ 2019-05-07 22:43 hfctf0210 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 题意:给定2行n列的四连通带权网格图,支持修改边权和查询第[l,r]列的最小生成树 题解:这是一道好题,要么SDOI2019中n=2的20pts怎么会“我抄我自己”?(当然NOIP2018“我抄我自己”除外,因为那是想给大家送分,而且NOIP2018的质量有多烂大家自己心里清楚) 对于区间[l,r] 阅读全文
posted @ 2019-05-07 18:25 hfctf0210 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 为什么我怎么看都只会10pts?再看还是只会50~70?只会O(n2(R-L+1))/O(nlogn(R-L+1))……一眼看动态DP可还是不会做…… 根节点的答案是叶子传上来的,所以对于L=R的数据,可以直接枚举需要±n的叶子节点个数num,然后答案就是2num,每次枚举时重新扫描一下就是O(n2 阅读全文
posted @ 2019-05-06 22:38 hfctf0210 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 首先只需要考虑每种牌出现的张数即可,然后判断一副牌是否能胡,可以DP一下,令f[i][j][k][0/1]表示到了第i位,用j次i-1,i,i+1和k次i,i+1,i+2,是否出现对子然后最大的面子数量,j,k∈[0,2],转移也很容易。这样暴力枚举可以获得50pts的“好”成绩。 然后可以丢掉第一 阅读全文
posted @ 2019-05-06 16:04 hfctf0210 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 通过打表证明发现答案就是把序列划分成若干段,每段的b都是这一段a的平均数。50分做法比较显然,就是单调栈维护,每次将新元素当成一个区间插入末尾,若b值不满足单调不降,则将这个区间与单调栈前一个区间合并。 由于题目要求每次只修改一个数,所以可以前后缀拼起来,单调栈要改变,然后发现这个显然满足二分的性质 阅读全文
posted @ 2019-05-06 10:02 hfctf0210 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 首先,对于从每个点出发的路径,答案一定是过这个点的路径所覆盖的点数。然后可以做树上差分,对每个点记录路径产生总贡献,然后做一个树剖维护,对每个点维护一个动态开点线段树。最后再从根节点开始做一遍dfs,把每个节点对应的线段树启发式合并即可。时空复杂度均为O(nlog2n)。听说还有一个log的做法,但 阅读全文
posted @ 2019-05-05 22:21 hfctf0210 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 为什么ABC那么多?建议Atcoder多出些ARC/AGC,好不容易才轮到AGC…… A 签到。就是以黑点为源点做多元最短路,由于边长是1直接bfs就好了,求最长路径。 #include<bits/stdc++.h> using namespace std; const int N=1007,dx[ 阅读全文
posted @ 2019-05-05 13:50 hfctf0210 阅读(334) 评论(0) 推荐(0) 编辑