- 博客(27)
- 收藏
- 关注
原创 『强连通分量·DAG最长链』Grouping
题目描述告诉你某些人的年龄大小关系,问你把所有的人分成若干个组,最少需要多少组,使得组内任意两个人的年龄不可比。题解如果存在环,这些人一定相等。因此可比。为了统计方便可以缩点。如果存在一条链,这些人也能可比,因此这些链不能处于同一组。我们在缩点以后,每个点的点权为缩点以后的点集大小,则答案为缩点以后点权和最大的最长链。一下给出证明:因为最长链上的点任意两个分在一组都能到达,因此答案...
2019-07-31 21:18:15 340
原创 『二分答案·二分图判定』关押罪犯
题目描述题解这道题我们可以二分枚举这个影响力,显然影响力越小,越不容易满足,且具有单调性。我们发现当一个二分值合法,必定满足大于这个数的怨气值不能够存在,而小于或等于的存在或不存在均可。因此我们可以将大于的连接一条边,那么如果要分成两组,则连接的两条边要在不同的组内,因此这就是一张二分图。只要我们对每一个边权大于midmidmid的边连接一条边,用染色法判定是否为二分图即可。时间复杂度...
2019-07-30 20:10:35 140
原创 『图上DP·最短路』「NOIP2017」逛公园
题目描述题解不考虑000环如何处理,我们发现这和正常的最短路计数比较相似。对于最短路计数,我们可以用f[i]f[i]f[i]表示到点i的最短路有多少条,在更新最短路的时候直接更新。这样的做法在实际的数据中能够拿到30分。发现这里的kkk很小,我们可以尝试在状态上增加,即f[i][j]f[i][j]f[i][j]表示到第i个点,路径大小为最短路+k+k+k的方案数。由于更新的时候你不知道最...
2019-07-30 19:15:53 149
原创 『图论』三元环计数
题解我们可以统计每一个点的度数,对于边(u,v)(u,v)(u,v)而言,如果duu<duvdu_u<du_vduu<duv或者在度数相同时u<vu<vu<v,则从uuu连接一条vvv的边,否则由vvv连向uuu。因此三元环的形态一定是由度数小或字典序较小的点连向其它两个点,其它两个点又是有一条边相连的。我们可以枚举每一...
2019-07-30 08:13:12 406
原创 总结
day2上午:还行,基本听懂题目写得少,目标:[ZJOI2016]旅行者,区间统计xor和max之类的。下午:不行,基本没听懂。字符串就放弃了吧,图论还要写一下三元环计数和四元环计数,KMP想写一下动物园,其它就不管了。差分约束还不是很熟练啊,题目写得也很慢,要加强了啊。...
2019-07-29 20:30:05 112
原创 『平面最近点对』
题解每次找中,记两边分治的答案为ans,将横坐标与中点差ans的节点加入。然后按照y排序,再双重循环枚举,如果纵坐标相差超出了ans就弹出。代码如下:#include <bits/stdc++.h>using namespace std;const int N = 300000;struct node{ double x, y;} a[N];int n;in...
2019-07-29 20:09:49 106
原创 『分治·GCD』区间GCD和
题解结论:当右端点固定,左端点不固定的区间gcdgcdgcd中,一定有相同的个数不超过log2(n)log2(n)log2(n)段且单调递增的gcdgcdgcd序列。因为nnn分解质因数顶多logloglog个质因子,每次还需要减少不增多,因为上述结论正确。我们每一次都枚举右端点时,动态维护这一个gcdgcdgcd序列,相同部分用左右端点表示即可。即:每一次新加入区间为[i,i][i,i...
2019-07-29 19:10:16 646
原创 『分治·ST算法』区间最大值和
题解首先对于区间 [L,R][L,R][L,R] 来说,若 ax=max(a[i]),i∈[l,r]a_x=max(a[i]),i∈[l,r]ax=max(a[i]),i∈[l,r].则 xxx 的贡献就是跨过点xxx的区间个数×ax\times a_x×ax.即ax×(x−L+1)×(R−x+1)a_x\times(x-L+1)\times(R-x+1)ax×(x−L+1)×(R−x...
2019-07-29 18:05:01 558
原创 『分类讨论与并查集』Homework
题目描述题解如果yyy的取值比较小,我们可以每一次都对读入都直接用数组标记。如果yyy的取值比较大的话,我们可以查找1−t1-t1−t的最小值,t+1t+1t+1~2∗t2*t2∗t的最小值等等。最小值可以利用并查集来维护,倒着删除数字即可。具体实现的话让每一个数iii联想i+1i+1i+1,如果存在数字i就以自己为祖先;每次从第一个开始找即可。删除数字就把iii连向i+1i+1i+1,其...
2019-07-19 19:37:04 107
原创 『动态规划·数论优化』先进序列
题目描述题解先排序,很容易得到f[i]=f[j]+1,gcd(a[i],a[j])=1.f[i]=f[j]+1,gcd(a[i],a[j])=1.f[i]=f[j]+1,gcd(a[i],a[j])=1.我们可以对每一个数分解质因数,寻出到数组内,更新最大的fif_ifi值。然后每次只需要在质因数内找最大值更新即可。由于分解质因数,时间复杂度:O(n logn)O(n\ l...
2019-07-19 19:17:11 199
原创 多么悲伤的经历啊啊啊啊
几次考几次考砸的原因:syq的第二次:没有取模。110注意:看到取模的问题以后一定要敏感。Alice的第一题期望的以此:第一题题意理解有误。90这个嘛…就是描述的问题拉搜索:莫名奇妙190注意以后不要在函数内定义数组,还有并查集size合并方面需要注意数据结构第一次:第一题写不出来,第二题没时间,应该写出来第一题30实力问题DP1:难20实力问题DP2...
2019-07-18 22:03:07 139 1
原创 『动态开点线段数』「NOIP2017Day2T3」列队·毒瘤
题目描述题解观察到每一个点离队以后方阵的变化,可以发现:对于每一个离队,如果是最后一列,变化的仅仅只有最后一列。如果离队的不是最后一列,则变化的是这一行以及最后一列。因此,我们需要动态维护nnn行列为[1,m−1][1,m-1][1,m−1]的方阵队形,并且维护最后一列的方阵队形。我们所进行的操作就是,在删除节点的位置标记一个 111 ,在其余位置标记一个 000 ;那么只需要找...
2019-07-18 21:13:24 179
原创 『线段数扫描线·树的DFS序』茉莉花茶
题目描述题解对于子树问题,我们可以使用树的 DFSDFSDFS 序来解决这个问题,因为树的DFS序可以十分有利的求解子树相关问题。思考这道题如何用 DFSDFSDFS 来解决。对于平面直角坐标系来说,以节点编号为横纵坐标,我们可以通过计算如下两个矩形的面积并:以 Lu−RuL_u-R_uLu−Ru 为长, Lv−RvL_v-R_vLv−Rv 为宽。以 Lv−RvL_v-R_v...
2019-07-14 21:56:47 334
原创 『优先队列』Fedor and coupons
题目描述、题解这道题可以得到一个结论就是,重叠区间的左端点一定是某一条线段的左端点;否则可以往左移到左端点处来使得答案更优。因此我们可以枚举左端点,查找向右的 kkk 条线段中坐标最小的最大。我们可以进行的操作是,另当前的左端点是重复区间的左端点;因此在左端点小于这个点的线段中寻找右端点最小值最大的 kkk 条线段,此时可以用优先队列来进行维护。具体的操作就是,左端点从小到大进行排序,...
2019-07-14 19:11:45 153
原创 『倍增』Minimal Segment Cover
题解对于区间覆盖类的问题,我们可以想到用培增来解决。首先,我们需要预处理第一步的操作,即一个店所能够跳到的最远的点。然后就是倍增,有f[i][j]=f[f[i][j−1]][j−1].f[i][j]=f[f[i][j-1]][j-1].f[i][j]=f[f[i][j−1]][j−1].然后再是询问,也是一样,不断的条,知道跳到r为止;我们可以一直限制小于rrr,最后加上一个111即可。...
2019-07-11 18:42:48 156
原创 『差分』magic stone
题目描述题解这道题的题目很特殊,因为变来变去太多,我们需要通过一个固定的方式来寻求答案。所以这道题的难点就在于寻求不变量,我们要在变化中查找哪些东西是不变的;只有这样才能和最后的答案对应起来。我们发现有加法有减法,对应的,差分序列也是有正有负的的,我们可以思考和差分的关系。接下来是我写的推到过程:…...
2019-07-11 18:38:36 110
原创 『差分·线段树』Nastya Hasn't Written a Legend
题目描述题解不知道如何想到差分…反正正解很玄学…如果对于i来说需要满足赋值条件,满足条件ai+1−ai<kia_{i+1}-a_i<k_iai+1−ai<ki。如果令ci=∑j=1ikic_i=\sum_{j=1}^{i} k_ici=∑j=1iki,就有ai+1−ai<ci−ci−1a_{i+1}-a_i<c_i...
2019-07-11 18:30:54 148
原创 『树状数组』绕圈跑
显然我们可以预处理出每一个人在事件结束后跑步的圈数s_i那么答案可以表示为:∑i=1n−1∑j=i+1n⌊sj−si⌋\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \lfloor s_j-s_i\rfloori=1∑n−1j=i+1∑n⌊sj−si⌋我们来思考一下⌊s1−s2⌋\lfloor s_1-s_2\rfloor⌊s1−s2⌋和⌊s1⌋−⌊s2⌋\l...
2019-07-10 21:41:58 107
原创 『枚举优化』字符串函数
题解很容易发现,对于任意aia_iai和bjb_jbj若两者相等,一定会产生如下贡献:∑i=1n∑j=1nmin(i,j)∗min(n−i+1,n−j+1)\sum_{i=1}^{n} \sum_{j=1}^{n} min(i,j)*min(n-i+1,n-j+1)i=1∑nj=1∑nmin(i,j)∗min(n−i+1,n−j+1)然后拆开,就可以得到两种情况:∑i=1n∑j...
2019-07-10 21:28:33 143
原创 『莫队·树状数组』Mato的文件管理
题解对于区间询问,我们可以想到莫队,而逆序对则需要用树状数组来维护。因此我们便可以动态维护区间的逆序对。例如:删除左边的点,要在删去树状数组中比它小的点。加如左边的点,则加入树状数组中比它小的点。删除右边的点,就删除比它大的点,因为右边的点点往往处于逆序对中的较小者,而左边则属于较大者。然后用莫队和树状数组维护即可。代码如下:#include <bits/stdc++.h...
2019-07-09 18:38:16 180
原创 『贪心』阿狸和桃子的游戏
题解显然,这道题目的点权很容易去分配,其关键便在于边权的处理上,即如何处理两种边权的情况。还有一个问题在于,什么叫做当前的最优选择,点权和边权的不同意味着有不同的选择方法,这也让这道题变得非常的棘手。我们便来思考一下,如何解决这两个问题呢?显然这个问题,每一步都要有一个固定的选择方法,即必须以一个固定的标准评判究竟那个最优。并且,这个标准只能由一个具体的数值来表现。由于每次取的是点...
2019-07-08 18:57:40 267
原创 『贪心·枚举优化』Ramesses and Corner Inversion
题目描述题解首先,看到题目以后很棘手,因为你无法确定一个正确的求该方式是怎样的。思考一下以前的一个问题关灯:这个问题是一行一行的更改,我们的主要思路是先固定第一行,把n−1n-1n−1行改变以后再判断最后一行是否合法。那么我们可不可以考虑借鉴上述思路,具体如下:确定左上角为(1,1)(1,1)(1,1)的矩阵,右下角为(n−1,m−1)(n-1,m-1)(n−1,m−1)的矩阵。然...
2019-07-08 18:45:25 133
原创 『动态规划·状态压缩·概率期望』礼物
题目描述题解首先普及一个知识点,每一件物品选到的概率是pip_ipi,则在所有物品里面至少选到一件的概率是:∑pi\sum p_i∑pi.然后就是很明显的概率状压了。我们设f[i]f[i]f[i]表示状态为i的期望次数。则一定有:f[i]=∑j in if[i去掉j]∗pj+(1−∑j in ipj)∗f[i]+1f[i]=\sum_{j\ ...
2019-07-05 21:29:40 188
原创 『组合计数』Fseq
题目描述题解现在我们的问题转化为,在下图的原点出发,有下列两种操作:横坐标加111,纵坐标加111,此时相当于选择了一个数1.1.1.横坐标加111,纵坐标减111,此时相当于选择了一个数−1.-1.−1.有多少种方案不经过y=−1y=-1y=−1,到达(n+m,n−m).(n+m,n-m).(n+m,n−m).则一共有n+mn+mn+m次操作,一共能选择m次进行向下的操作,所...
2019-07-05 20:47:22 390
原创 『动态规划·背包』Gift
题目描述题解如果当前的第iii个物品不选,且在不选的物品中是最小的,那么这就意味这体积小于aia_iai时不会再有其它物品填充背包,那么对于其它的物品进行完01背包后所贡献的答案是:∑i=m−ai+1mf[i]\sum_{i=m-a_i+1}^{m}f[i]i=m−ai+1∑mf[i].但是这么做有两个难点:时间复杂度不够优秀,且无法保证当前物品是否是没有选则的物品中最小的。因此我...
2019-07-05 19:58:41 207
原创 『记忆化搜索』魔塔
直接暴力记忆化搜索,以(横坐标,纵坐标,当前能量,击杀的怪兽数)为状态记忆化即可。直接看代码:#include <bits/stdc++.h>using namespace std;const int N = 12;int h, n, m, Ans;int dx[4] = {-1,1,0,0};int dy[4] = {0,0,-1,1};int f[N][N][...
2019-07-04 16:08:58 405
原创 『动态规划·状态压缩』广场铺砖问题
问题1有一个n行m列的广场,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法?题解设f[i][j]f[i][j]f[i][j]表示第iii行,状态为jjj的方案数。在状态jjj中,111表示竖着放长方形的上半部分。000表示其余部分。显然上一排空缺的部分肯定是要竖着放置的。就看剩下横着的能不能连续的两个两个放置。状态转移很显然:f[i][j]=∑f[i−1][k]f[i...
2019-07-02 09:44:08 681
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人