自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 和平委员会 洛谷 P5782 [POI 2001]——Tarjan算法,2-SAT问题

这个题是一个2-SAT问题,即一串bool型变量,每个变量只能取1或0,我们对其进行复制,使其满足要求。此题中,每个党派必出一人,且两个人中只能出一人便可抽象为一个2-SAT问题。对于输入中的一条边,我们可以如下图蓝色边将其余节点连起来,即划到一个强连通分量内(3和5,4和6,但对于题中的边不一定是连续,也可以是3和11,4和12之类的)。于是我们便可以将其转化为图论问题,用Tarjan算法求强连通分量。可以看看这个佬的博客。

2025-02-25 16:36:24 461

原创 Remainder Problem CF1207F

但是向上面这样优化之后还是会超时,我们仔细观察之后会发现,上述操作虽然能够少访问大量的元素,但若是x等于1、2、3之类的较小的数,我们遍历一次要访问的元素量仍然是非常大的。因此,我们不妨开多个数组,在执行操作1时便将一些数求和的结果记录下来(如让a[2][1]记录除以2余1的项的和)。那么我们要记录多少呢,假设我们从1记录到a了,那么我们在执行操作1的时间复杂度便可以看作O(a*500000),执行操作2的便可以看作O(500000*500000/(a+1)),均指最坏情况。,即我们的数组要记录从1到。

2025-02-24 20:12:17 1177

原创 彩蛋-祭奠我们逝去的寒假 洛谷 U538120

猜就完了

2025-02-24 12:03:51 365

原创 糖果 洛谷 P8687 [蓝桥杯 2019 省 A]

我们令dp[i]表示选择情况为i时的需要购买的最小组数,令p[i]为第i组包含元素的具体情况(具体情况p[i]以及dp[i]中的i都是用二进制数表示的,不了解的话可以先看看。第一行输入三个数n,m,k,n表示总组数,m表示有1到m共m种糖,k表示一个组内有k个数。有n个组,每组含有k个数,选择能够集齐1到m所有数的最小组数。输出一个数,若可以买到所有种类的糖则输出最小组数,否则输出-1。注:由于我们求的是最小,我们要将dp数组初始化为尽可能大的值,如。接下来n行,每行输入k个数,为每个组包含的具体的数。

2025-02-24 11:36:37 591

原创 13th Labour of Heracles CodeForces - 1466D

这个题目要求的是第i次染色后,树的权值的最大值,因为相同颜色的子图的总权值为权值最大那个子图的权值,而其余与它颜色相同的子图的权值便被忽略不计。关于图的权值的变化,我们发现,若是我们将一个段分成两个颜色不同的子段,那么这两个子段相交处的那个点的权值便会被算两次,即图的。定义颜色x的同色子图为图中所有颜色为x的边,及其顶点形成的同色子图。一个同色子图的权值定义为子图内所有同色连通块的权值的最大值。一个同色连通块的权值为该连通块所包含的点的权值的和。一种染色方案的权值定义为所有颜色的同色子图的权值和。

2025-02-22 19:52:55 493

原创 Mex Game【Atcoder】

而最终决定胜负的也就是mex(X)这一个元素,我们此时已不用考虑它定义中的最大最小,因为只剩下了一个元素,就是mex(X)。那么这个博弈的胜方便很明了了,若是字符串中A比B多,则Alice胜,B比A多则Bob胜,一样多则Alice胜,因为她先手。如果t是奇数,则Alice将选择一个非负整数x,并将X替换为X∪{x};如果t是偶数,Bob将选择一个非负整数x,并将X替换为X∪{x}。对于由非负整数组成的有限集合X,mex(X)是使得x∉X的最小非负整数x。你得到一个长度为 N+1N+1 的字符串,由。

2025-02-22 18:37:18 369

原创 Conveyor CF1733E

因此我们要讨论的块的总数为t-x-y+1(t时刻总体),和t-x-y(t-1时刻总体)。有一个 120 行,120 列的棋盘,行列编号均为 0,1,⋯,119,i 行 j 列的格子的坐标为 (i,j),左上角的格子坐标为 (0,0)。我们可以记录(x,y)在t时刻前经过该块的史莱姆数,若t-1时刻的数目与t时刻的数目的差为0则说明t时刻没有史莱姆到达(x,y)这一个块,反之则有。dp[x][y]表示t时刻那t-x-y+1个史莱姆中经过(x,y)的数目,而非t时刻所有经过该块的数目。

2025-02-22 11:34:44 1130 1

原创 String Problem 2021 ICPC沈阳 M——Lyndon分解

因此,当他的朋友土豆给他一个字符串问题要解决时,他会立即把它给你,并继续玩Genshin Impact,世界上最伟大的游戏。例如对于样例1的第二个位置'o',依题目要求有两个字串“po"和"o",字典序更大的是"po",则该子串的范围为[1,2]因此输出其左右边界1,2.由于Lyndon分解求的是s的字典序严格小于s的所有后缀的字典序,我们将其逆用即可(改变大小于号)。根据题意,我们要找的便是字串s,满足所有s的后缀的字典序都小于s。,使用Duval算法在O(n)内可以求解。

2025-02-21 17:06:18 429 1

原创 元素 洛谷 P4570 [BJWC2011]——线性基

我们可以一位一位地判断,将该数二进制下的1,从高到低一位一位地消掉,若能够被消成0,则说明存在一个子集使它们的异或和为0,不可加入。例如要判断的数x在二进制下为i位,我们先判断dp[i]是否已经赋值,如果没有,则说明答案序列中没有一个数能将这个数的最高位消掉,即无法将这个数消掉,则将zp[i]赋值为该数,并。题目要做的就是,找到一个序列,使任意一个序列中元素在该序列中都没有一个不含它的子集,与它的异或和为0,并且使该序列的魔力值的和尽可能大。至于判断一个数是否可以加入序列,因为在每一位上有。

2025-02-21 11:38:29 357 1

原创 CF1392F Omkar and Landslide

我们根据刚刚的分析,假设前面一个子序列是“稳定的”,即他前面的都是公差为1等差数列(如{2,3,4,4,...,x,x,..}),那么第一个“4,4”我们便可以将他看作前面提到的“在开头处”,因为其无法与前面的数再进行操作,那么后面的“x,x”则是在中间产生,不稳定。我们假设一个极端情况,即前后两段都是公差为1的等差数列,而交界处的差值为2,例如:{1,2,3,4,6,7,8}那么4和6可以进行一次操作,序列变为{1,2,3,5,5,7,8}但此时的序列并不稳定,因为5和3以及7都可以再次进行操作。

2025-02-18 19:52:26 477

原创 图的逆变换 洛谷 P4575 [CQOI2013]

我们可以发现,对于输入的边(x,y),在D中x的终点就是y的起点,因此,拥有相同y的边必定终点重合,拥有相同x的边必然起点重合。E中有一条0到1的边,说明在D中0的末尾和1的起点相接,而E中还有一条2到1的边,说明边2的末尾和1的起点也相接,即0和2的末尾重合,那么由E中2到3的边可知,E应当还有一条0到3的边,但是没有,所以矛盾,输出No。于是,对于并查集中被划分到同一组的点(如find(x+m)==find(y)),其实是重合的点,即,在E中应有一条x到y的边,若无则输出No。

2025-02-18 12:06:47 456

原创 排列计数 洛谷 P4071 [SDOI2016]

显然,就是在字符串中选择m个数,再将剩下的数进行错位排序。记录这个题的原因就是记一下逆元和错排公式。简单的排列组合可以得到答案。

2025-02-17 21:05:08 199

原创 windy 数 洛谷 P2657 [SCOI2009]

我们从上界的最高位往后看,例如现在操作到了第i位,我们令该位值为j,那么我们将j从0开始往上遍历讨论(如果是首位则从1开始,因为首位不能是0),但要注意,j的值需要与前一位的值的绝对值大于等于2,且要。此外,为了运算方便,我们可以使用类似前缀和的方式,令num(x)为以x为上界的方案数,则答案的值为num(r)-num(l-1),l为左边界,r为右边界。由于dp数组统计的是所有首位为j的i位数的方案,故对于我们的上界和下界,可能会出现取不完(即dp数组的值大于实际情况),严格小于上界再该位的值。

2025-02-17 20:45:43 688 1

原创 CF2066C Bitwise Slides

由题意可知,每次这三个元素中必须有两个相同的,于是我们可以令截止到第i位的前缀异或和为。最终结果是将dp数组的值加起来。在操作完a[i]后,状态为为。转移得到,有三种可能(有三个。转移得到,有两种可能,故。

2025-02-15 21:25:59 364

原创 Work Scheduling G 洛谷 P2949 [USACO09OPEN]

那么我们从后往前看,则截止日期最晚到次晚的那段时间内,仅能完成截止日期最晚的工作。于是我们可以将工作的截止时间从晚到早排序,先将最晚的那一批加入优先队列(重载一下小于号利润高的在前面),然后将最晚到次晚的截止时间的差的值的工作完成,弹出队列,再依次向前推进。对于这种工作期限与一段时间内最大可能利润的题我们一般按照截止时间从小到大排序,但是这个题不可这样做。这个题所有的工作所需的完成时间都是一天而非一个区间,就是说,只要在截止日期之前的任一天都可以做。是截止日期相邻的两类工作的截止日期,则在。

2025-02-15 20:52:11 330

原创 股票交易 洛谷 P2569 [SCOI2010]

假设在i-w-1天时,手上持有股票数为k,那么dp[i][j]的状态相对于dp[i-w-1][k]购入股票数为(j-k),因此。2.不买也不卖:手中拥有的股票数量j不变,直接继承上一天的,dp[i][j]=max(dp[i][j],dp[i-1][j])。1.没有股票地买入:只有支出,盈利dp[i][j]=-ap[i]*j,j为买入的数量,,因此dp[i][j]的取值便是dp[i-w-1][k]-(j-k)*ap[i]这个式子在。,dp[i][j]的值同样是这个式子在这个区间中的最大值。

2025-02-15 16:22:29 596

原创 异或序列 洛谷 P4462 [CQOI2018]

那么显然从x到y这个区间的前缀和就是a[x-1]^a[y],于是我们要求的异或和为k的子区间的数目就变成了求区间[l,r]内有多少对(x,y)满足a[x-1]^a[y]=k。我们使用莫队来维护每个值出现的次数以及在它前面能够与它异或和为k的数的数量。这个题目理解起来十分简单,就是一个异或和问题,它的难点在于如何快速地统计出各个区间的答案而不超时。而为了快速统计一个区间内满足条件的区间,我们可以使用异或前缀和来简便运算。我们先用a[i]来存储前i项的。

2025-02-11 21:26:00 282

原创 ABB 洛谷 P9606 [CERC2019]

翻转字符串后再用KMP求末尾开始的最长回文串长度

2025-02-11 10:04:43 300

原创 【Atcoder】Triangle-构造三角形

我们可以合理地假设s为1e9*k+c,其中k为任意常数,c为小于1e9的任意常数。那么,a的值便等于c,b的值便是k。于是我们先将s对1e9取余,得到的便是1e9减去a的差,再用1e9减去这个差便得到a的值为(1e9-s%1e9),为了保证a的范围将这个值再对1e9取模。但是显然不行,因为S的数据范围为1e18,点坐标的范围为1e9,这样做显然会超范围。因为S的范围刚好是坐标范围的平方,我们不妨先将一个点的一个坐标先定为1e9,以防止另一个点的坐标超范围,但是问题来了,我们如何确定另外的坐标呢。

2025-02-10 21:20:43 215

原创 棋盘制作 洛谷 P1169 [ZJOI2007] ——悬线法

悬线法求解

2025-02-08 21:47:47 421

原创 中国象棋 洛谷 P2051 [AHOI2009]

与经典的国王问题不同,我们不需要记录每种情况棋盘的具体状况,我们只用记录下该情况中各种炮数目的行数为多少。我们定义dp[i][j][k],表示前i层中,有一个炮的行数为j,两个炮的行数为k,则没有炮的行数为m-j-k。每一次行动时,我们有三种操作,不放棋子,放一个,放两个。放两个棋子又分为三种情况:两个均放在没棋子的列上,一个在没棋子的列上一个在有一个的列上,两个都在有一个的列上。由于“炮打翻山”的攻击特性,我们可以知道在棋盘中的任意一列或是任意一行上,最多只能有两个炮存在。其中C2(x)函数即组合数。

2025-02-08 20:51:22 339

原创 Imbalanced Arrays - Codeforces 1852B

由于序列b[n]中不存在两个互为相反数的数,故在序列a[n]中,值为0或n的元素不会同时出现。就是说,对于一对合法的a[n]和b[n],在a[n]中至少会有一个元素值为0或是n,且a[n]中不会同时出现0和n。我们可以发现,若是我们将刚刚考虑过的元素从a[n]中去掉,剩下的元素仍能够组成一个合法的新a[n]序列,即他元素中的0或n仍然满足上面推出的性质,不过值得注意的是,若是删去的是原先值为n的元素,那么其他所有a[n]的值都要减小,因为其对应b[n]中的值与其他所有元素在b[n]中的值的和都为正。

2025-02-08 20:16:24 348 5

空空如也

空空如也

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

TA关注的人

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