把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

随笔分类 -  qzezoj

摘要:题面传送门 题面概述:给定s序列,满足对于所有1i<nsisi+1,求L(sisj) 然后你会发现一个很有趣的数据范围:\(s_i\leq 10^ 阅读全文
posted @ 2021-04-06 19:35 275307894a 阅读(96) 评论(0) 推荐(0) 编辑
摘要:题面传送门 就这道题我打了一个小时我太菜了。 首先这道题爆搜不可取算了吧。 然后其实这道题可以dp 因为乘法和加法不同所以分开来算。 先算乘法,定义fi,j,k\(\)[i,j]区间内组成k值的最小操作数。这个区间dp就可以了。复杂度O(n2T) 然后考虑加法,同样也是一样的 阅读全文
posted @ 2021-03-21 16:26 275307894a 阅读(50) 评论(0) 推荐(0) 编辑
摘要:这道题O(n2)的dp是很好想的。 设fi表示到i时的队伍小于等于ranki最大的不用移动的个数,那么显然状态转移方程是 fi=maxj=1ji&rankjrankifj+1 就是从小于等于一定不用乱序的转移。 阅读全文
posted @ 2020-10-05 16:33 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要:用脚找一下规律就会发现可以构成最后一项为全部异或和的循环节。 那么前缀异或就好了。 代码实现: #include<cstdio> using namespace std; int n,m,k,z; long long a[1000039],q[1000039],ans,x,y; int main() 阅读全文
posted @ 2020-10-05 14:55 275307894a 阅读(35) 评论(0) 推荐(0) 编辑
摘要:看到数据范围一眼状压。 然后就是怎么转移的问题了。 设fi为使用状态为i时所用的节点数。 然后你会发现这个用O(2nnk)的转移不了。 那么就可以枚举子集转移。 dp方程为dpi=mindpj+dpijlcp(i) 复杂度O(3n) 代码实现: #inc 阅读全文
posted @ 2020-10-05 14:53 275307894a 阅读(38) 评论(0) 推荐(0) 编辑
摘要:当然这道题可以跑最小生成树。 但是那样时间复杂度是O(nmα(n)),可以被卡掉。 这里有一个跑不满O(nm)的 就是每次拿到一条边,就搜索是否联通。 不连通就加上去 联通就找到最大的那条边,看看能不能替换,能换就换。 代码实现: #include<cstdio> #include<cstr 阅读全文
posted @ 2020-10-05 14:41 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
摘要:题面传送门 我们可以二分这个值。 然后验证时将所有数字减去这个值,看看有没有长度大于m权值之和大于0的子段就好了。 代码实现: #include<cstdio> #include<cstring> #include<algorithm> #define max(a,b) ((a)>(b)?( 阅读全文
posted @ 2020-08-01 20:26 275307894a 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这个对于每个边跑拓扑序即可,如果有环那么不可行,如果两个字母拓扑序相同也不可行。 代码实现: #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; int n 阅读全文
posted @ 2020-07-15 21:54 275307894a 阅读(48) 评论(0) 推荐(0) 编辑
摘要:题面传送门 直接建分层图跑spfa即可。 注意一些细节即可。 代码实现: #include<cstdio> #include<cstring> #include<queue> #define abs(x) ((x)>(0)?(x):-(x)) #define max(a,b) ((a)>(b)? 阅读全文
posted @ 2020-07-15 21:52 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
摘要:题面传送门 对于一个点,考虑如果把它和它的子树断开来。 断主要边肯定是断和父节点连着的边。 断次要边统计子树内有几条次要边连向外面。 如果只有一条,那么就断这一天,ans++ 如果没有,那么随便断,加上次要边边数即可。 统计子树内边数可以用树上差分 时间复杂度O(nlogn) 代码实现: 阅读全文
posted @ 2020-07-13 22:02 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要:题面传送门 题目中要求最小路径生成树的方案数。 先跑一遍spfa把最小路径跑出来,然后对于每个点枚举边,看看有几个点是可以转移,然后乘法原理计数即可。 代码实现: #include<cstdio> #include<cstring> #include<queue> #include<algori 阅读全文
posted @ 2020-07-10 21:51 275307894a 阅读(48) 评论(0) 推荐(0) 编辑
摘要:题面传送门 题目大意:构造一个完全图,使得在最小生成树唯一(题目中给出)的情况下权值总和最小。 直接克鲁斯卡尔模拟,在合并两棵树时进行操作。 合并两棵树时要连的边的条数是sizx×sizy1,即将合并的这条边一定是两棵树中最大的边,而所有不在最小生成树内的边一定大于这条边,所以 阅读全文
posted @ 2020-07-10 21:48 275307894a 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题面传送门 90分做法见这里 正解是线段树+分治。 我们尝试在线段树上跑分治,则维护线段树每个节点的有几个位置没被选两边跑分治就好了。 代码实现: #include<cstdio> using namespace std; int n,sum[4000039],now[1000039],a[10 阅读全文
posted @ 2020-04-11 16:31 275307894a 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题面传送门 70分做法参考这篇博客 考虑在70分做法上优化。 70分是一个一个找的。我们可以用树状数组维护序列aii之前有几个位置被占了。 则当i<j时,aiaj,这满足二分的性质,所以我们可以二分找位置。 时间复杂度O(nlog2n) 代码实 阅读全文
posted @ 2020-04-10 20:13 275307894a 阅读(62) 评论(0) 推荐(0) 编辑
摘要:题面传送门 题目告诉我们,没有三点共线,所以我们可以容斥。 两条线,x,y相等,即平行。那么我们可以用总可能数-2条直线平行-3条直线平行。 用hash来判断平行线。 代码实现: #include<cstdio> #include<cstring> #include<cmath> # 阅读全文
posted @ 2020-04-09 13:09 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
摘要:题面传送门 看数据范围,对于 100的数据 1n1051Ai1091m105 ,可能是O(nlogn)O(nn),再看开了两秒,就知道是O(nn)了。 这道题是一 阅读全文
posted @ 2020-04-08 15:37 275307894a 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题面传送门 考虑用哈希折半搜索来解决。 观察以下原式am+an+ap=ai,m,n,p<i考虑移项得到am+an=aiap,m,n,p<i,那么两边就可以分别枚举了。 代码实现: #include<cstdio> #include<cstring> #include<cma 阅读全文
posted @ 2020-04-06 17:16 275307894a 阅读(30) 评论(0) 推荐(0) 编辑
摘要:题面传送门 对于这道题,正着枚举是很难枚举的,但我们可以反着来。 俗话说得好,正难则反。 考虑最小的一个数hi,则所有数都是大于等于它的,所以它的排位应该是在vi。 考虑第二小的数hj,则除了hi没有其他数小于它,所以我们可以直接找到除了vi外的第i位,它的答案就是 阅读全文
posted @ 2020-04-03 12:43 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题面传送门 考虑把两个操作合并,会发现把每4个分为一组,会剩下第3个。 则我们可以很容易地推出递推式:fx=4×fx+141 则我们就可以很容易地找到最后剩下的位置了。 那么根据位置求数字就很简单了。 代码实现: #include<cstd 阅读全文
posted @ 2020-04-03 09:31 275307894a 阅读(52) 评论(0) 推荐(0) 编辑
摘要:题面传送门 直接暴力BFS,判断当前点和下一个单位时间有没有石头,并且当时间>22时就跳出。 为什么是22呢? 考虑极端情况,一块石头在1,x的位置,如果这块石头掉到底部要8单位时间,然后如果现在再开始走,走到终点要14个单位时间。 代码实现: #include<cstdio 阅读全文
posted @ 2020-03-31 17:49 275307894a 阅读(35) 评论(0) 推荐(0) 编辑

浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示