随笔分类 -  《洛谷永远滴神》

orz!!
摘要:题意:求解$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}d(ij)$ 首先莫比乌斯函数有性质:$d(ij) = \sum_{x | i}^{}\sum_{y | j}^{}|gcd(x,y) == 1|$ 那么,我们可以代入得: $ans = \sum_{i = 1} 阅读全文
posted @ 2020-10-19 07:31 levill 阅读(92) 评论(0) 推荐(0)
摘要:不是很难,这里筛法写错了,一度以为自己推错了。。 题意:求解$ans = \sum_{x = 1}^{a}\sum_{y = 1}^{b}|gcd(x,y) = d|$ Solution: $ans = = \sum_{x = 1}^{[\frac{a}{d}]}\sum_{y = 1}^{[\fr 阅读全文
posted @ 2020-10-17 08:36 levill 阅读(130) 评论(0) 推荐(0)
摘要:题目就是求解:$\sum_{i = 1}^{n}\sum_{j = 1}^{m}|gcd(i,j) = prime|$ 显然先枚举素数。这里我们定义P为素数集。 即$ans = \sum_{d\epsilon P}^{}\sum_{i = 1}^{n}\sum_{j = 1}^{m}|gcd(i,j 阅读全文
posted @ 2020-10-16 10:45 levill 阅读(160) 评论(0) 推荐(0)
摘要:推公式真有意思(bushi 题意:求解$ans = \sum_{i = 1}^{n} k~mod~i$ 这里n,k都很大,O(n)显然会TLE。 我们对这个式子进行一下化简$ans = \sum_{i = 1}^{n} k~mod~i\rightarrow \sum_{i = 1}^{n}k - [ 阅读全文
posted @ 2020-10-14 13:52 levill 阅读(121) 评论(0) 推荐(0)
摘要:这题的话不是很难,个人感觉难的地方就是求出矩形第四个点的坐标。 对于第四个点的坐标,先用向量垂直来找出直角顶点,然后就可以用矩形中点的坐标来求出第四个点的坐标。 然后就是连边跑个最短路就行。 中间建图连i -> j,然后就忘了j -> i。(亿点点问题 #include<bits/stdc++.h> 阅读全文
posted @ 2020-09-30 15:15 levill 阅读(165) 评论(0) 推荐(0)
摘要:第一道黑题,虽然是模板题~。 Min25筛. 将多项式转化$f(i) = i*(i - 1) \rightarrow f(i) = i*i - i$。 对所以对于后面的g = g2 - g1。定义g2 为关于i*i的函数,g1为关于i的函数。 那么对于s出删去的实际是g2 - g1的j = 0时候的 阅读全文
posted @ 2020-09-22 07:46 levill 阅读(146) 评论(0) 推荐(0)
摘要:这题有很多的做法。 首先最远的两个点很显然是直径。 然后和之前做的一道直径合并很像。 我们知道这里是一个单点修改,修改了之后会影响它的父节点以上的情况。 那么,我们又知道dfs序满足子节点的dfs序在父节点的dfs序内部。 那么我们可以用线段树去维护dfs的区间直径。 然后显然这个区间是子树的包含关 阅读全文
posted @ 2020-09-19 07:48 levill 阅读(159) 评论(0) 推荐(0)
摘要:一开始没注意数据范围~ 可以发现列最大只有15。 并且我们修改的是一个矩形。 那么就是一列列修改并且统计答案。 这里就可以用线段树,对每列建树,然后更新统计答案。 具体怎么统计,就是因为每次都是将一个区间内的数改成1或0,那么我们先统计出每个区间的标准1和0个数。 那么改成哪个就是哪个为相同的答案。 阅读全文
posted @ 2020-09-16 19:58 levill 阅读(222) 评论(0) 推荐(0)
摘要:算下作为最小值的最大长度,然后找下最大的。 // Author: levil #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; const int N = 2e6 阅读全文
posted @ 2020-09-15 20:56 levill 阅读(136) 评论(0) 推荐(0)
摘要:将题意转化下,就是求满足$(n-a[i]) \equiv 0 ~mod~(b[i])$的最小的非负整数x。 转化一下$(n-a[i]) \equiv 0 ~mod~(b[i]) \rightarrow n \equiv a[i]~ mod (b[i])$ 那么,就是个CRT。 这里的话,中间会爆lo 阅读全文
posted @ 2020-09-15 09:11 levill 阅读(133) 评论(0) 推荐(0)
摘要:这题挺好的吧~ 先处理出不能走的点,然后再跑最短路的时候去判断就行。 对于不能走的点: 先建反图跑最短路,给不能走到终点的点打上标记,然后和这些点相连的点也打上标记。 // Author: levil #include<bits/stdc++.h> using namespace std; type 阅读全文
posted @ 2020-09-14 22:16 levill 阅读(172) 评论(0) 推荐(0)
摘要:好题! 第一眼就感觉是dp。 设dp[i][j]表示到第i个位置上面-下面为j的最小步数。 可以发现,这里由于上面-下面可能是负的。 那么单纯去dp显然不行。 这里就用到了一个思想,零点转移。 因为差距最多在5,6000左右,我们设6000为0点,那么-T就变成了6000-T。 然后就可以去dp了, 阅读全文
posted @ 2020-09-14 07:51 levill 阅读(141) 评论(0) 推荐(0)
摘要:这题做出来了很有成就感(骄傲.jpg) 虽然这题没评级,但我感觉应该有紫题难度吧? Solution: 数据很小,然后题目里说了要横纵分解区域。 所以可以从这里出发,dfs分解区域。 具体怎么分解:可以发现,如果在这个地方分解开当前区域,那么必须满足两边断电后都能满足。 如果可以,那么再去看是否能分 阅读全文
posted @ 2020-09-14 07:09 levill 阅读(218) 评论(0) 推荐(0)
摘要:一开始还觉得很难,结果。一发过了。 其实观察可以发现就是一个最小生成树。 对于前k条边,我们去连最小生成树,显然这时比较的是自己想的花费。 然后剩下的就是老师讲的花费比较,再去连最小生成树。 // Author: levil #include<bits/stdc++.h> using namespa 阅读全文
posted @ 2020-09-13 20:36 levill 阅读(160) 评论(0) 推荐(0)
摘要:一道非常好的题,太菜了调了很久,细节非常多。 首先,将题意转化一下,由给定的两段都有的长度,可以组成多少种组合。 设dp[i]表示,长度为i的方案数。 那么有转移,$dp[i] = \sum_{j = 1}^{tot} dp[i-a[j]]$//tot为两段都有的元素个数,注意要去重 这里虽然可以用 阅读全文
posted @ 2020-09-08 07:24 levill 阅读(240) 评论(0) 推荐(0)
摘要:树上查询某一路径上的第k大。 首先,我们只需要处理出路径上的权值线段树即可。 我们建立根到u的前缀和主席树。 那么对于查询u,v。和树上距离的类似。 sum[u] + sum[v] - sum[lca(u,v]] - sum[fa[lca(u,v]]]。 因为这里的话,lca的值也需要算入。所以第二 阅读全文
posted @ 2020-09-05 18:49 levill 阅读(176) 评论(0) 推荐(0)
摘要:这题思考如何去查询。 我们可以建主席树。 那么对于区间的数量最多的数,我们可以“松弛“去查找。 当某个区间的数量大于一半时,我们就去找那个区间,然后到叶子节点,那么叶子节点的数量肯定就满足大于区间的一半。 显然这个数最多只能有一个,那么左右区间肯定只有一个被松弛到。 // Author: levil 阅读全文
posted @ 2020-09-05 15:20 levill 阅读(151) 评论(0) 推荐(0)
摘要:回顾一下可持久化线段树。 这题是经典的查询静态区间第k小。 对于主席树,可以将每个区间位置,看成第i个历史版本,然后对每个点去维护一棵树。 然后对于第i个点维护的x位置,存的值是1~i的x的前缀和。 查询的时候,比较下前缀和左边是否满足即可。 注意换到右边时,需要减去左区间个数,保证相对第k小。 / 阅读全文
posted @ 2020-09-05 13:55 levill 阅读(172) 评论(0) 推荐(0)
摘要:前言:准确理解题意并转化,也是非常重要的一步。 dsu on tree裸题。 对于静态链分治的理解,更加深刻了一些,对于mx等有影响的参数。 在处理轻儿子时,也需要清空,这才是真正意义上的清空操作。 // Author: levil #include<bits/stdc++.h> using nam 阅读全文
posted @ 2020-09-04 15:33 levill 阅读(193) 评论(0) 推荐(0)
摘要:其实不难但是被char*折磨死了。mp居然用了char*不能统计int。一定要string. 原理:好像两个值虽然相同,但是char*是地址,地址不同也算不同,所以不能判重。 回到正题: 和CF208E Blood Cousins基本一样的思路,只是这里加了个map判重。 然后上dsu on tre 阅读全文
posted @ 2020-09-04 10:38 levill 阅读(247) 评论(0) 推荐(0)