自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 八皇后 Checker Challenge

再来看这个方向对角线格子的特点,(1,1),(2,2),(3,3),(4,4)不难发现,同一个对角线上横坐标和纵坐标的差值是一样的,我们可以构造一个数组a[ i - j + n ],来表示这个方向对角线是否有棋子,但是 i-j 有可能是负数,所以我们还需要加上一个n。我们来观察对角线上格子的特点,(1,2),(2,1);(1,3),(2,2),(3,1) 可以发现,同一个对角线上横坐标和纵坐标的和是一致的,我们可以构造一个数组 a[ i + j ] ,来表示这个方向的对角线上是否有棋子。

2025-03-05 17:33:01 279

原创 线性DP(AcWing273.分级)

得到的差值是最小的。找一个minv来表示上一位中的最小的差值。可以发现最好情况是找到一个最长不下降子序列C,让B与C相同,剩下的元素再进行讨论(应该是能证明的吧。显然,当A数列递增时,B数列必然可以直接选取A数列中的元素来保证差值最小,而当A的子序列不为递增时,例如。此时根据引理,我们将A数列进行排序,将A数列的元素依次作为B数列的元素来计算差值。,其中k则是上一位的取值,我们既要保证k是小于等于j的,又要保证上一位填。B数列可以是单增或单减,以下都只讨论单增的情况。则是最好的选择,也能保证差值最小。

2024-12-12 13:23:11 282

原创 ST算法(区间最值)

给定一个长度为N的数列A,ST算法能在O(NlogN)时间预处理后,以O(1)的时间复杂度在线回答“数列A在下标l~r之前的数的最大值是多少”,这样的区间最值问题。设F[i,j]表示数列A中下标在子区间[i,i+2^j-1]里的数的最大值,也就是从i开始的2^j个数的最大值。那么“以l开始的2^k个数”与“以r结尾的2^k个数”一定会覆盖整个区间[l,r],比较这两段的最大值即可找出整个区间最大值。即长度为2^j的子区间的最大值时左右两半长度为2^(j-1)的子区间的最大值中较大的一个。

2024-11-13 15:55:51 179

原创 倍增(AcWing109)

倍增,字面意思就是“成倍增长”。我们在递推时,如果状态空间很大,通常的线性递推无法满足时间和空间复杂度的要求,那么我们就可以通过倍增的方法,只地推空间中2的幂位置上的值作为代表。当数据普遍很小而空间很大时,二分的效率还不如遍历,而当数据普遍很大时,两者的效率都不如使用倍增的遍历,尽管二分在平均效率上很不错,但在某些情况中倍增会更好用。例题。

2024-11-09 22:28:07 671

原创 程序自动分析(AcWing237)

对题目稍加思考就可以发现,我们想要满足所有的约束时,只需要找到一个反例即可以说明不能满足所有约束,所以我们可以先对所有e=1的约束进行操作,利用并查集的原理将他们全部连在一棵树上,然后再对所有e=0的约束进行判断,如果这两个数的根节点不相同,即可判断“NO”。值得注意的是,这里的i和j范围为1e9,而n只有1e5,我们完全可以利用离散化将数据范围控制在2*1e5中。这道题需要用到并查集的知识点,但网站上有许多讲解并查集非常优秀的文章,这里就不讲解了,直接对题目进行分析。

2024-10-30 21:14:47 161

原创 离散化(AcWing103)

通俗的讲,离散化就是把无穷大集合中的若干个元素映射为有限集合,以便于统计的方法,例如,在一些情况中,问题的范围定义在整数集合,并且只涉及其中m个有限数值,但是与这m个数值的绝对大小无关(只把这些数值作为一个代表或者与他们的相对顺序有关)。此时,我们就可以把整数集合中的这m个数与1,2..m建立映射关系。也可以理解为,将一串按照从小到大排列并且没有重复的一串数字,用它们的下标来代替它们的数值,这时该算法的时间,空间复杂度只与m有关。

2024-10-16 22:48:08 303

原创 差分(AcWing100,101)

这是一个差分序列,当我们想要将A[1]到A[5]都加上1时,这5个数相对的差值是不变的,只有最左侧的数和左边一位的相对值会+1,同理最右侧和右边一位的数相对值+1,所以我们只需要改变两点的值就可以完成一次区间变化,如果想要恢复成原序列,只需要再用一次前缀和运算即可。所以我们优先选择操作一,先计算B数组正数和负数各自的和,设正数和为q,负数和为p,则需要进行min(q,p)次操作一,剩下的数一定全是正数或者全是负数或者全为0,我们就需要进行操作二,改变一个点的数据,即|q-p|次操作。

2024-10-13 11:44:35 813

原创 前缀和(AcWing99)

在这里简单介绍一下前缀和的概念,并给出一道例题加以理解。

2024-10-11 12:24:34 417

原创 Sumdiv(acwing97)

求的所有约数之和 mod 9901。

2024-10-04 13:21:56 312

原创 费解的开关AcWing95

25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态(0变成1,1变成0)。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。现在给一个这样的01矩阵,问:最少需要多少次点击可以把这个矩阵变成全1矩阵。

2024-09-29 09:08:31 328

原创 递归初级题

从1~n这n个整数中随机选取任意多个,输出所有可能的选择方案。可以通过位运算枚举所有状态然后输出,这里用递归。递归的重点总是在递归的前后状态上,大部分递归如果你去手动推的话很容易乱成一团,不知所云,建议用整体的思想去参透递归。在这道题中,我们只需要确定“选”还是“不选”这两个分支,进行递归。而最后一个 s[a]=0;同理也需要用整体的思路理解。

2024-09-25 20:42:04 258

原创 lowbit运算

lowbit(n)定义是非负整数n在二进制表示下“最低位的1及其后面所有的0”构成的数值,例如 n =10 的二进制表示为 (1010) , 则lowbit(n) = 2 = (10).下面解释以下lowbit(n)的公式。

2024-09-22 20:20:58 572

原创 起床困难综合征Acwing998

2121 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因: 在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。正是由于 drd 的活动,起床困难综合症愈演愈烈, 以惊人的速度在世界上传播。为了彻底消灭这种病,atm 决定前往海底,消灭这条恶龙。

2024-09-19 22:36:57 688

原创 最短Hamilton路径

浅析最短Hamilton路径

2024-09-13 14:19:39 344

原创 求a的b次方(快速幂)

快速幂简介

2024-09-11 11:26:54 294 1

原创 最长不下降子序列

最长不下降子序列n2法和nlogn法

2023-03-17 17:50:27 176 1

原创 浅析线段树

线段树

2022-08-20 10:34:58 439

空空如也

空空如也

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

TA关注的人

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