自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Codeforces Round 901 (Div. 2)扫题

首先不考虑最少操作次数,本题求出n和m的最小公倍数就可以实现均分。也就是每位小朋友可以得到gcd(n,m)/m个苹果片。每个苹果被分成了gcd(n,m)/n份。那么从被分成的份数中可以得到分成的份数必须是2的次方数。所以在这里通过b&(b-1)去除数中的最后一个1,也可以用来检测是不是2的倍数。本题直接做得话删除并没有什么规律,也不是每次删最小的就是最优的选择。最后将所有得苹果片数求出来来,计算多出来的苹果片数就是切了多少刀,因为每切一刀就增加一个苹果片。本题要求将n个苹果,每次可以将一个苹果分成两半。

2023-11-16 20:47:23 151

原创 Codeforces Round 906 (Div. 2)扫题

那么对于有1节点参与的来说:a[i]+a[1]>=i。毕竟只要有一个a[i]>=i后后面再有节点相连就可以继承a[i]的值了。由于想要是完全不对称字符串,而添加的字符串是01,是一个偶数。如果左右两边都是1的话,那么就给左边位置添加01,如果左右两边都是0的话,那么就给右位置添加01。本题提供一个01的字符串,然后可以将01插入到字符串的任何位置,不限次数。又有添加的字符串时01,不改变01的相对数量。那么对于这道题来说两个连通块想要连接就必须有至少一个连通块的数值a[i]>=i。当然这是最小的条件。

2023-11-14 21:34:19 135

原创 01BFS

这样可以保证将代价小的先出队。优化了之前随意入队出队的方式。保证了单调性后也就意味着只要碰到结果坐标出队了就证明答案出现。否则在这种图中只用bfs是不可以直接遍历到就是答案的,毕竟他不符合越远越大的规则。那么如果不用01BFS就得全部跑一遍,其实就不知道什么时候退出了。而01BFS其实就是使用一个双端队列将0的代价保存进队首,1的代价保存进对尾。01BFS顾名思义是用在代价只有0和1的图里面的。

2023-11-07 11:01:09 155

原创 双向广搜

在这里使用交替进行的双向广搜,将初始状态和结束状态都放进队列里面,这样在去队列里面的数进行移动的时候就是在交替的从开头和结尾出进行BFS。那么我们将开头推出来的状态设为1,结尾推出来的状态设为2,当某个状态推演之后和原来状态一个是1一个是2的时候就证明双端相遇了。本题给出得是一个数,我们可以将其使用字符串保存起来,也可以直接保存数字。在移动的过程中自然还是要转换成二维数组的方式去移动。

2023-11-07 10:00:43 121

原创 Educational Codeforces Round 157 (Rated for Div. 2)C,D

C题要求寻找所有符合要求的拼串,那么一眼暴力就是枚举所有拼串组合的可能性,但这样必然会超时。我们不妨从每一个数作为左边或者作为右边来入手,当某一个数作为左边的时候那么这个拼后的串的中间点就去这个数里面去寻找,可能是在某处也可能是这一整个数。那么这样的去寻找就可以将所有符合要求的组合找到。那么我们选定一个数的某个部分作为拼后串的左半部分后,就可以确定右半部分需要总和是多少以及多长。在这里事先将每一个数的长度和总和求出来,那么在寻找的时候可以直接hash去寻找个数,加快速度。

2023-11-05 21:41:11 190

原创 求逆元两种方式

那么由定义知,求a模m的逆元,就是求解同余式ax=1(mod m),并且在实际使用中,一般把x的最小正整数解称为a模m的逆元。假设a、b、c是整数,m>1,且有ab=1(mod m)成立那么就说a和b互为模m的逆元。通俗的说,如果两个整数的乘积模m后等于1,就称他们互为md的逆元。那么要求解同余式ax=c(mod m)的话,根据一系列的推论可以转化成求解ax+my=gcd(a,m)。还有一种使用费马小定理求逆元(要求m必须是素数且a不等于0(mod m)),一般就看m是不是素数就行。

2023-10-18 22:19:57 46

原创 D. Monocarp and the Set

所以我们需要计算出一个最初的值之后后面的结果根据某处字符的变动来进行调整。变成了'<'或'>'的话就需要将产生的数除掉。那么你可能回想其他符号的数不会产生一些种类吗,其实如果先将某些数当做?放入之后,'<'和‘>’的位置中放什么数其实已经固定了。本题需要按照字符串中的要求去按个放数。那么我们需要换个角度去看,我们假设放的数按顺序分别是a1,a2,a3,a4,a5,a6。因为题目中所给的mod是一个奇数,所以直接使用费马小定理求逆元。所以在这里我们需要求出除数的逆元,将其转化成乘法来计算。

2023-10-18 21:59:21 38

原创 C. Decreasing String

所以在这里找到另一个关键点:题目中只需要某个下标下的值,那么我们就可以在原字符串上进行操作,然后操作后让目标下标剪去该字符串长度。直到我们变换到目标字符串所需要的位置直接找到那个位置就行。这样使用链表去存储方便删除,就可以将时间和空间复杂度降下来。本题是一个贪心问题。最重要的就是去找字符串的变换规则。可以看出如果从左向右找的话,如果有某个字符比下一个字符大的话就直接删除即可。那么还有个问题就是不能简单地采用字符串拼接的方式,因为会超时。

2023-10-16 14:59:48 171

原创 B. Fear of the Dark

可以使用实数二分去做,二分的范围为0 到 A,B两点到O和P的最大值。2、各占一个灯在这个情况下还需要进行两个圆是否相切或者相交的判断。这道题其实也可以根据上面的情况直接分情况计算。1、O,P都能被一个灯照全。

2023-10-16 14:55:22 189

原创 E. Autosynthesis(图应用)

如果有入度为0的节点的存在那么就必须将其留下,因为没有其他的节点的值可以对应上它的编号,所以如果将他变到圈起来的那一部分不可能成功的。再由如果当前的节点需要留下的话,那么他所管理的下一个节点就必须被圈走,否则它的值没有对应。那么在这里就可以判断是否可行。):一方面多去判断一下就可以将这个节点及其下面这个区域图里面的节点给走完,更重要的是如果出现题目中第二个测试点这种自回路的情况可以去判断其不符合。本题中需要找某个编号下的值是否是另一个的编号,如果可以凑出值和编号的两者对应,那么就证明可以。

2023-10-11 17:17:04 163

原创 广搜优化-洋流

本题才是用BFS进行求解,但是单纯的使用BFS会出现错误,因为并不是每一步都是相同的消耗,如果让消耗多的先进入了那么该点就不是最小的消耗。可以使用一个优先队列来维护,每次都让最小的消耗去走,这样可以保持没一点都是由最小的来进入。但在本题当中,由于是01之间的消耗。所以可以使用一个双端队列,如果是0的消耗就放入对头,如果是1的消耗就放到队尾这样就保持队首一直是小的。在这里面到达某一个坐标的消耗用一个二维数组保存,并且要在队列头拿出来的时候进行判断不然会出现错误。

2023-09-30 13:45:17 42

原创 《算法竞赛·快冲300题》每日一题:“矩阵”

【代码】《算法竞赛·快冲300题》每日一题:“矩阵”

2023-09-23 22:43:16 28

原创 LCA的暴力优化(倍增方式)

文章借鉴自:算法系列——最近公共祖先LCA(暴力,倍增算法,Tarjan) - 白菜茄子 - 博客园 (cnblogs.com)LCA其实就是树上面两个节点的的最近公共祖先。也就是说最直接暴力的解法就是将这两点先调整的统一位置,然后同时向上找祖先,如果某个高度的祖先相等了,那么就找到了。

2023-09-19 21:26:51 84 1

原创 B. 攻防演练

这时候就需要去记录后面各种字母的最近下标,从中选取最远的那一个就是可以包含集合里面全部字母的序列。还有一个小点:本题需要输入输出的数据量大,不能使用c++的cin和cout。那么ab中可以选a或选b都行,又有三个ab,和排列组合的方式相似,可以证明一定可以选全长度为3的所以排列。所谓倍增的方式其实是每次都双倍跳跃,同时数也在双倍增加。当第一次跳到最远的地方的时候未必就是最长的长度。在记录了各个字母最近下标的最远下标后,采用倍增的方式快速计算。随后看这样的序列有多少种就可以得到需要多长的长度了。

2023-08-20 20:29:37 101 1

原创 位运算的小技巧

【代码】位运算的小技巧。

2023-08-17 15:53:52 42 1

转载 C++ std::bitset

可以作为容器类型使用,可以使用下标访问、迭代器等方式访问其元素。此外,它还可以通过位集合(bitset set operations)进行集合运算,如并集、交集、补集等,可以使用。类型表示一个固定长度的位序列,每个位都只能是 0 或 1。这个固定长度在创建对象时指定,并且不能在运行时更改。是 C++ 标准库中的一个类,用于表示二进制位序列。它提供了一种方便的方式来处理二进制数据,尤其适用于位运算操作。等,使其支持类似于整数类型的位运算操作。支持多种操作,包括位运算、位查询和位设置。进行相应的集合操作。

2023-08-17 15:46:21 111 1

原创 开关灯中异或的妙用

来源:牛客网。

2023-08-17 12:07:39 92 1

原创 jULfrWxbSg

s。

2023-08-16 21:43:30 39 1

原创 1790: [NewOJ Contest 10] 造电梯

本题的特点在于四联通,所以高楼层的电梯可以将相邻的楼层进行一个包含。使用一个优先队列来保持每次取出的都是当前最高的楼层,然后对该楼层进行一个遍历,将所有可以包含进来的楼层进行记录。给定的平面图是一个n*m的矩阵,里面的数字表示这个位置的高度。可以在建筑中的任意位置放置电梯,电梯可以停在所有楼层。现在给你一张建筑的平面图,按照要求,建筑的每一个部分都应该是轮椅使用者可以到达的,这意味着必须安装电梯。相同高度的楼层之间是互通的,联通准则是四联通。需要求解最少需要多少个电梯,注意高度为1的不需要电梯。

2023-08-13 16:11:54 37 1

原创 1823: [NewOJ Week 7] 村庄与部落

因为题上所说如果一个无人居住的村庄两侧都是A或者都是B的话那么认为该村庄也被A或B占领了。所以定一个慢指针l到左边的部落,r到下一个右边的部落。如果一个无人居住的村庄两侧都是被部落A占据的村庄,那么这个村庄也视作被部落A占据;字符串仅包含A、B、. 三种字符,分别表示被部落A占据、被部落B占据,以及无人居住。每组测试数据输出两个整数,分别表示被部落A和B控制的村庄数量。n个村庄坐落成一条直线,A和B两个部落生活在这里。每个村庄要么无人居住,要么被两个部落之一所占据。请求出被部落A和B分别占据的村庄个数。

2023-08-10 19:07:37 88 1

原创 储物点的距离

来源:牛客网。

2023-08-10 18:14:44 43 1

原创 货物种类(差分)

来源:牛客网。

2023-08-09 20:41:29 56

原创 值周(差分与前缀和)

来源:牛客网。

2023-08-09 14:32:11 79 1

原创 [NOIP2005]校门外的树

来源:牛客网。

2023-08-09 11:45:22 114

原创 1868: 连接草坪(II)

本题第一眼看上去可能没有什么思路,但观察会发现如果在土地中选取一个点,该点到三块草坪的距离和最小那么就可能是连接三块草坪的最小值。但如果三块草坪排列有平行的情况那么就有可能穿过某块草坪得到该点到那块草坪的最小值,这样的结果肯定不是连接三块草坪的最小值。在这时就可以计算出三块草坪两两之间的最短路,然后计算最短的两个最短路相加就是连接三个草坪的最小值。现在已知地图上有三片草坪,最少需要将多少个单位上的土地变成草,才能把两块草坪连接成一块草坪。在N×M的地图上,X表示草,.表示土地。接下来N行,每行M个字符。

2023-08-07 23:08:57 82 1

原创 枚举:四舍五入

来源:牛客网。

2023-08-07 17:47:54 31 1

原创 动态规划之1143. 最长公共子序列

本题使用动态规划去求解,由于涉及到两个字符串所以第一眼看上去就与之前简单地动态规划有所不同。所以需要使用二维数组来保存彼此之间的最长相同字符串。是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。最长公共子序列是 "ace" ,它的长度为 3。最长公共子序列是 "abc" ,它的长度为 3。两个字符串没有公共子序列,返回 0。是这两个字符串所共同拥有的子序列。,返回这两个字符串的最长。

2023-08-07 09:41:09 45 1

原创 动态规划之300. 最长递增子序列

是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。最长递增子序列是 [2,3,7,101],因此长度为 4。,找到其中最长严格递增子序列的长度。

2023-08-06 22:42:52 51

原创 动态规划之152. 乘积最大子数组

比如:nums=[2,-2,-1]。又由如果当前数是负数那么乘上的数越小值越大,反之乘上的数越大值越小的特点可以得到需要将当前递推式分隔成两种可能性,nums[i]大于等于0或者小于0。故还需要维护一个最小值的数组。,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。本题使用动态规划去求解,但直接使用前后递推的话不满足最优子结构的要求,结果不能为 2, 因为 [-2,-1] 不是子数组。子数组 [2,3] 有最大乘积 6。是数组的连续子序列。

2023-08-06 10:50:26 46

原创 动态规划之64. 最小路径和

请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。本题使用动态规划,将问题拆分成小问题,寻找小问题之间的递推规律。因为路径 1→3→1→1→1 的总和最小。每次只能向下或者向右移动一步。给定一个包含非负整数的。

2023-08-06 10:03:28 52

原创 动态规划基础题之三步问题

有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

2023-08-05 23:49:07 48 1

原创 P1896 [SCOI2005] 互不侵犯

然后将方案(i的数就是方案)和某个方案中1(也就是某一行中国王的个数)的个数进行保存。在上下两行中遍历每一行方案就是在由上一行的方案来确定下一行的方案(同样根据&运算来判断上下两行是否符合要求)。最后将最后一行,K个国王的不同方案数相加就是最终的结果。因为&是按位与运算,然后<<位移运算符的优先级比&运算符的优先级要高,所以会将原来的二进制数左移一位,这样彼此之间就错开了一位。如果错开了之后按位与运算结果是0那么就可以知道在这个二进制序列里面一定没有相邻的国王存在(1代表有国王,0代表没国王)。

2023-08-04 18:44:03 71

空空如也

空空如也

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

TA关注的人

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