自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(150)
  • 收藏
  • 关注

原创 Educational Codeforces Round 103 (Rated for Div. 2)

2.if f[i - 1] >= i, f[i] = max(f[i], i + p[i])向右.3.第i个灯笼向左,照亮范围内的灯笼全部向右.用二分+ST表即可.可行性转最优性,考虑前i个灯笼最多能照亮的灯笼f[i].

2023-02-09 14:45:42 203 1

原创 Codeforces Round #699 (Div. 2)

首先每一层尽可能染成一种颜色,如果恰好平分,那么答案为树的最大深度.这毫无疑问是答案下界,我们再去找答案上界,猜测是最大深度+1.假设我们在染色某一层时,剩下m个点未染色,有t个非叶节点,那么我们肯定能将这t个非叶节点染成同一种颜色,因为至少还有t个叶子节点,我们只需要拿数量多的颜色来染即可,然后染叶子节点,显然能调整成与刚才非叶节点同一种颜色.

2023-02-09 14:36:13 463

原创 Educational Codeforces Round 140 (Rated for Div. 2)

1

2023-02-05 18:46:27 238

原创 Codeforces Round #842 (Div. 2)

1

2023-02-05 15:44:55 174

原创 Educational Codeforces Round 141 (Rated for Div. 2)

首先考虑dp,若i同时接受i-1和i+1的作用,这样转移行不通,但是实际上我们只需要考虑i-1对i的贡献即可,枚举i的值x,设f[i][x]为操作1~i-1执行完毕后第i位的值为x的方案数.f[i][x]转移到f[i+1][a[i+1]+x]或f[i+1][a[i+1]-x].

2023-02-05 13:24:37 334

原创 Codeforces Round #843 (Div. 2)

如果a[i]>0,那么我们可以利用前面a[i]

2023-02-04 23:54:10 162

原创 Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round)

1

2023-02-04 22:44:48 223

原创 Codeforces Round #845 (Div. 2) and ByteRace 2023

1

2023-02-04 22:08:50 142

原创 Codeforces Round #846 (Div. 2)

1

2023-02-04 21:26:05 173

原创 Educational Codeforces Round 142 (Rated for Div. 2)

1

2023-02-04 20:43:32 534

原创 Codeforces Round #848 (Div. 2)

1

2023-02-04 17:16:08 195

原创 线性代数之线性基

在谈论线性基之前,先介绍什么是基向量.根据高中数学,一个二维直角平面坐标系中的所有向量都可以只用(0, 1)和(1, 0)合成.那么(0, 1)和(1, 0)就是,所有基向量能合成的所有向量被称为基向量的在二维空间中,有没有其他的向量能作为基向量呢?答案是肯定的.上图的两个向量的张成跟(0, 1)和(1, 0)的张成空间是一样的.注意到,只要两个向量不共线,其张成都跟(0, 1)和(1, 0)的张成空间一样,即都可以作为二维空间的基向量.

2023-02-03 16:31:04 1729

原创 Codeforces Round #696 (Div. 2)

然后由于不同最长上升子序列的最大值和最小值不相交,所以我们只考虑一个区间内只有一种最大值和最小值的情况.我们用dp解决问题,设f[i, j]表示值i在第j段的方案数,f[i, j] = f[i - 1][j](if j段递增) + f[i - 1, j - 1] + ... ,然后这里有一个技巧的做法,由于最长上升子序列的性质,我们按照值域递增处理,先把每个折线左开右闭分割成多个区间,然后对每个折线的点x,记录x - 1, x, x + 1,并离散化,对每段值都进行dp转移,并用矩阵快速幂优化.

2023-01-01 22:22:02 64

原创 Codeforces Round #837 (Div. 2)

ABC略.

2023-01-01 12:24:03 176

原创 Good Bye 2022: 2023 is NEAR

A.B略。

2023-01-01 11:58:38 653 1

原创 Educational Codeforces Round 102 (Rated for Div. 2)

ABCD略。

2022-12-11 23:34:04 229

原创 Codeforces Round #695 (Div. 2)

ABC略。

2022-12-11 23:23:44 98

原创 Codeforces Round #694 (Div. 1 + Div2)

ABC略。

2022-12-10 17:16:19 141

原创 约瑟夫环问题

期末数据结构复习时看到约瑟夫环问题,之前遇到这个问题是用链表模拟写的,今天我们将从数学层面探讨这个问题.问题大概如下:n个人围成一圈,编号1~n,然后从1开始顺时针报数,每次报数报到m时,报到这个数的人自杀,然后下一个人重新从1开始报数,以此类推,最后问最后存活者.我们可以手玩一下:假设n = 8, m = 3,那么可以得到7号玩家为最后胜者,为了方便处理数据,我们将所有编号都减去1(环形)我们观察7号玩家在每一轮与报"1"的玩家的距离:6->3->0->3->0->1->1->0,发现(n - km +

2022-12-07 00:15:13 242

原创 几道有趣的贪心题

首先,对于两个人a,b我们判断要抢A给B还是抢B给A,假设前面的策略比较好m(a)-p(b)>=m(b)-p(a),即m(a)+p(a)>=m(b)+p(b).于是我们先按照m+p从大到小排序.注意到答案有单调性,二分抢的人数k,然后我们先在尽可能保证cntab>=ab的前提下分配给cntba,然后再对bababa去掉头/尾然后转化一部分给ab,有可能cntab比较多,可以用同样办法给cntba.然后我们可以先选好最小的k个m+p的p,其余的n-k选出最大的m,然后调整,从n-k个中调整被资助的人.

2022-10-27 23:13:33 120

原创 CF1717E

我们预处理欧拉函数和用埃式筛法预处理每个数的因数,然后枚举n - c的因数t,然后计算即可.我们假设gcd(a, b) = t,然后求。,然后转化成欧拉函数,接下来找互质即可,互质,提不出公共的约数.此时。,这里技巧性地构造了。

2022-09-03 12:28:44 113

原创 P3561 [POI2017]Turysta(竞赛图哈密顿回路的构造+强连通分量)

首先,竞赛图在缩点之后会形成一条链,然后在同一个强联通分量内的点都具有哈密顿回路,这道题的做法就很清晰了:先找出每个连通分量的哈密顿回路,然后对于每个点,从其所在的连通分量开始走一直走到链的另外一端,就是最长的路径.容易知道,上面两种情况是不满足第一,二个前提下,对于第三个前提最坏的情况,但是我们仍能找出满足第三个前提的路径(S -> i, i -> nxt[S]和 pre[T] -> i, i -> T).3.枚举每个点,找到j -> i, i -> nxt[j],然后把这个点插入路径即可.

2022-08-25 14:46:56 1818

原创 P2502 [HAOI2006]旅行(最小生成树魔改)

想用dijkstra + SPFA写的,但是没写出来.然后我们看到边数很小,可以想到一个m^2logm的做法,就是枚举最大边,然后枚举最小边加边进去,直到s与t联通,我们对边从大到小排个序即可.

2022-08-24 19:36:09 104

原创 P2664树上游戏(点分治)

直接做比较难,我们考虑贡献.注意到,对于一个点x,如果x的颜色是根节点到x这段路径上第一次出现的颜色,那么x会对根节点除了以x所在分支对应的儿子为子树以外的所有节点(包括根节点)产生sz[x]的贡献,sz[x]指的是以x为根的子树的大小,这里我们不考虑其他节点也出现了这个颜色的情况,我们后面会解决这个问题.接下来具体是每个点怎么计算答案.解决树上路径问题,我们可以想到用点分治.现在问题转化为对树上lca为根节点的点对的路径的颜色进行计数.

2022-08-24 19:27:13 793

原创 01分数规划与图论

0/1分数规划模型是指,给定整数和,求一组解使得下列式子最大化:.

2022-08-22 00:29:09 818

原创 兔子与数列(分治 + 记忆化搜索)

【代码】兔子与数列(分治 + 记忆化搜索)

2022-08-21 19:45:45 79

原创 Acwing405将他们分好队(二分图 + 背包回溯)

首先,正着解有点难,我们反过来,如果两个人不认识,说明一定不能在同一个队伍里,我们给两个点连一条边,然后处于一个点双的点是确定一个其他都确定的,我们用染色法判断是否能染成二分图即可.染完色以后,我们看到差值最小,可以用背包解决.

2022-08-19 23:44:09 76

原创 CF1720D2(字典树解决异或运算+dp)

考虑优化这个方程.看到这个位运算,我们比较烦的一点就是不等号,我们尝试变成等号,a_j ^ i < a_i ^ j,此时我们在二进制的情况下观察这个不等式,发现从最高位开始,将会出现第一个位置是a_j ^ i!= a_i ^ j的,由于是小于号,所以在这个位上,a_j ^ i是0,a_i ^ j是1.此时我们画个真值表看一下a_i,a_j,i,j的取值.在第k位之前呢,a_j ^ i = a_i ^ j,此时移个项,a_j ^ j = a_i ^ i.

2022-08-19 13:35:49 200

原创 HNOI2010平面图判定(2-SAT + 平面图判定定理)

手动模拟可以发现,除了环上的边,对于两条边来说,如果在环内相交了,我们可以将其中一条边翻到环外,于是我们有一个暴力的思路,枚举两条不在环上的边,如果相交,我们将其按照2_SAT的建图方式建图,判断是否能一个在环内一个在环外.,其中m为边数,n为点数,将不可能形成平面图的情况筛除,然后枚举边就成了O(n^2)的了.然后暴力枚举是O(m^2)的.此时我们可以根据一个平面图的前提条件。

2022-08-19 10:55:11 512

原创 魔改森林(dp+容斥原理)

然后这道题就做完了,注意坐标的变换,使得计算更方便.

2022-08-18 00:21:01 241 2

原创 牛客多校第9场B(前缀和与差分优化dp)

设计状态:最开始我是将f(i, j)表示为走到第i格走了j步,但是这样转移f(i, j) = ∑f(i - a(k))(j - 1) * 1 / a(k).O(n^3).这样貌似没办法优化,因为枚举的顺序取决于外层.于是我们调换顺序f(i, j)表示走了i格走到第j步,这样f(i + 1, j + 1 + ...) = f(i, j) * 1 / a(j),这样就能用前缀和加差分优化了....

2022-08-16 11:32:57 78

原创 牛客多校第九场I (单调栈优化dp/单调栈的常用套路)

但是一个一个一个求时间复杂度会爆炸,所以我们使用结构体存这一段内最小的min值,再存前缀最小的minf + val值,然后再存a值,然后用单调栈维护a值递减的结构体.假设这些段为[l_1, r_1], [l_2, r_2]....[l_s, r_s],那么我们改写状态方程,设计状态:f[i][j]表示1~j的塔被拆成i块的最小代价.,其中val_t表示第t段的max值..时间复杂度O(n^3)...

2022-08-16 00:41:24 197

原创 P3225 [HNOI2012]矿场搭建(tarjan缩点)

2.一个割点,我们需要一个逃生点,并且不在割点.如果炸了割点,我们从逃生点离开,如果炸了逃生点,从割点去往其他连通块.3.两个割点,不需要逃生点,炸了任意一个割点之后,都可以通过其他割点离开.1.没有割点,我们需要两个逃生点,如果一个逃生点被炸了以后....

2022-08-14 22:20:19 137

原创 和与或(有点不一样的数位dp?)

注意到,每一位只能选至多一个1.加上每一位r[i]的限制,联想到数位dp.设f[pos][lim]为当前的数位为pos,lim是大小为(1

2022-08-13 22:27:43 67

原创 ICPC济南J(构造+二分图)

比较容易想到的是,把整个图分成奇数层和偶数层,我们这里使用二分图染色分层,规定白色的点比黑色的点数少,此时白色点最多有50个.我们对白色点进行重新编号为1~cntwhite,假设点x的编号(白色点)为id[x],此时白色点第59位置为0,第id[x]位置为0,其余置为1.对于黑色的点,其相邻的点必定为白色,假设其所有白色相邻点的编号的并集为tmp,此时设计黑色的点59位为1,然后加上并集.如果点x和y有连边,当且仅当a[x] or a[y] = 2^60^ - 1 (两者是充分必要)(给出一种情况即可)..

2022-08-12 23:59:56 217

原创 2020沈阳ICPC H(背包+双指针) I(同余方程结论)

用dp解决这道题.我们以天数作为阶段,显然这是无后效性的,然后根据题意设计f[i]为处理前i次借车花费的最少的费用.然后这就是背包了.这里转移的时候我最开始是想到二分,但是会T.于是观察到转移有单调性,然后就用双指针优化dp了....

2022-08-11 23:50:49 337

原创 P1099 树网的核(树的直径 + 单调队列优化dp)

首先,我们两次bfs求出直径,并且记录路径.把路径上的点打上标记,然后把路径存入path数组中.注意到路径有长度限制s,我们可以用单调队列优化dp.现在我们考虑怎么求最小的最大路径.最大路径的点可能在红色(除了直径外的向下的点),蓝色(直径上该点向上的点),紫色(直径下该点向下的点),红色的点可以预处理,蓝色和紫色的点可以在单调队列优化dp时用左右指针维护.总的时间复杂度是O(n)....

2022-08-11 12:44:43 210

原创 CF1485C(整除分块+根号分块)

推柿子:那么,最终的答案其实就是.我们可以先暴力枚举, 对于b >= √x的部分,min(x, b * b + b - 1)一定为x,此时求.对于,我们套路的处理方法就是,求出块长,先令,然后.由引理可知,,然后再换元回来即可.这道题中,令,,....

2022-08-09 20:43:08 125

原创 牛客多校第七场J(线性dp)

首先,子段模k余0可以转化为sumi ≡ sumj (mod k),就是两个sum值在模意义下相等,由于模意义下sum值为0~k-1,那么我们可以确定阶段,i表示已经放完模意义下sum值为0~i-1的数,然后我们需要刚好为t的贡献,如果有x个sum在模k意义下相等,那么产生的贡献为。就表示已经放完模意义下sum值为0~i-1的数, 当前放第模意义下为i的数,已经放了j个位置,产生的贡献为k的方案数.然后就可以状态转移了.,此时我们需要知道位置的信息,还需要知道产生的贡献,于是就把这两个信息放在状态中....

2022-08-09 13:51:21 85

原创 CF1183H(线性dp+简单的容斥)

显然,f[i][j]表示前i个字符产生的字符串产生长度为j的子序列一共有多少种,如果所有字符都不一样,那么f[i][j] = f[i - 1][j] + f[i - 1][j - 1], 但是有相同的字符,我们考虑容斥,如果这个字符有前驱,我们要减去f[pre[i] - 1][j - 1],因为这个字符和前驱组成的字符串本质上是一样的.:给定一个长度为 n 的字符串 以及 一个数字 k,规定串的每个子序列的价值为 ,现在要求你求出 个。指的是:子序列的内容不同,而不是单纯的子序列的位置不同。...

2022-08-09 13:42:34 106

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除