- 博客(21)
- 收藏
- 关注
原创 HDU 学数数导致的
首先,数对是有序的,<1,2>和<2,1>被视为不同的两组数字。其次,数对<p,q>的p和q可以相等。子序列为 p 0 p q,观察到,中间要出现一个0。那么,我们只需要找到第一个 p 满足与前一个 p 中间隔了最少一个0,并记录它的位置。那么,在它位置之后出现的所有正整数组成的集合的大小,就是 p 对答案的贡献。那么只需要先把满足条件的p的位置都求出来,然后按照从大到小的顺序排序一下,从后往前维护一个集合,然后遍历到p的位置的时候更新答案值,即可。
2025-03-14 23:29:54
365
原创 CF1305C Kuroni and Impossible Calculation
给定一个长度为 n 的数组,数组元素互不相同,输出所有满足 1 <= i < j <=n 的| a[i] - a[j] |的乘积对m取模后的结果。
2025-02-26 22:29:46
193
原创 P5782 [POI 2001] 和平委员会 2-SAT
显然,这道题是一个典型的 2-SAT模型 ,会的话直接套模版即可(不会也不要紧,我们从头分析)。在n = 2的情况下,只有1,2,3,4个代表,其中1,2和3,4分别在一个党派内。如果1,3互斥,在每个党派都有且仅有一个代表参加的前提下,选了1就必须选4,选了3就必须选2,但是,选了2,可以选3也可以选4,选4同理。所以,。那么,。反之,用Kosaraju算法判断最大联通分量,顺序输出答案中拓扑序大的即可。
2025-02-25 20:25:53
398
原创 AT_arc100_c [ARC100E] Or Plus Max 高维前缀和(sosdp)
给定一个长度为,起始下标为 0 的数组A,求出满足 i | j <= k()的前提下,的最大值。
2025-02-25 10:29:30
467
原创 AT_arc100_c [ARC100E] Or Plus Max 暴力 + 打表(附优化思路)
一个长度为 500000 (5*10**5),起始下标为1,初始值为 0 的数组,进行 q 次询问,每次询问有两张情况:1.下标为x的数加上y2.查询下标 i 满足 (i%x)== y 的数组元素的和。
2025-02-24 16:55:43
732
原创 洛谷 P8687 [蓝桥杯 2019 省 A] 糖果 状压dp
观察到,糖果的种类最多有20个,小于32,那么可以用二进制表示糖果的种类,进而表示每一袋糖果的状态。如果通过暴力递归,用每一袋取或不取两种状态遍历分析每一种情况,则时间复杂度为。于是,可以采用状态压缩优化。那么只需要输出 dp[1(<<m)]即可。
2025-02-24 10:46:09
417
原创 洛谷 P3627 [APIO2009] 抢掠计划 Kosaraju
初看题,可能想到用BFS遍历图,然后将每次取完钱之后的结果累计,遇到酒吧就更新答案值。但是,本题为直接使用BFS必然会导致死循环,而标记每个走过的节点,又不能维护后来的值优于先来的值的情况。于是,需要先对强联通分量并入一个集合中进行(即让多个可以相互到达的点看作一个整体),之后就可以开心的用BFS处理了。关于缩点处理,本文采用的是算法,即用两遍DFS预处理图:第一次 DFS,选取任意顶点作为起点,遍历所有未访问过的顶点,并在之后给顶点从小到大编号。
2025-02-24 00:15:44
496
原创 洛谷 CF1733E Conveyor
在(0,0)格,每一秒都生成一只史莱姆,每只史莱姆每秒都向右或向下一格,可见,每只史莱姆的位置(x,y)与当前时间t,它出生时间t'满足:其中,每只史莱姆的出生时间t'不同,所以不可能有两只史莱姆撞在一起,所以。对于每格子,如果它是第奇数次被史莱姆到达,那么下一秒史莱姆将会去它右边那一格;反之,则会去它下边那格。换而言之,如果一个格子被访问了n次,则有次去右边,次去下面。并且,在第t秒,第(0,0)格被访问了 t + 1 次。
2025-02-21 16:47:28
285
1
原创 洛谷 P4575 [CQOI2013] 图的逆变换 并查集
由题意可知:如果D中存在(u,v),(v,w),则E中存在(uv,vw),可见,如果在图E中,有任意两边有相同的后继,那么他们的前驱的所连的所有边组成的集合应该相等。所以,只需要将拥有相同后继的点加入到一个集合中,然后依次比较同一个集合中的点的连接的所有边的集合是否相同,即可。
2025-02-18 22:25:55
99
1
原创 洛谷 CF1392F Omkar and Landslide
给定一个长度为 n 的严格递增(h[i + 1] > h[i])的数组 h,若 h[i + 1] - h[i] >= 2,则将 h[i + 1] 变化为 h[ i + 1] - 1,h[i] 变化为 h[i] + 1,直到不能变化为止,输出最终状态下的数组 h。
2025-02-18 16:54:02
1328
1
原创 洛谷 P2657 [SCOI2009] windy 数
windy数,指的是如13,135,1357,13579这样的,各个数位与相邻数位的差的绝对值不小于2的数。同时,对于1,2,3这样的个位数,也是windy数。对于题目给出的区间查询,如果暴力遍历[a,b]的区间,挨个计算是否为windy数并统计数量,在2*1e9的数据范围下肯定会超过时间限制,必然要通过windy数的性质考虑优化。可以观察到,(如在135前面插入一个数3,可以发现,得到的新数3135仍然是一个windy数)换而言之,
2025-02-17 16:37:17
372
1
原创 CF2066C Bitwise Slides
进行 n 次操作,第 i 次操作中,选择 P,Q,R 中的一个数,变成与 a[i] 的异或和,且每次操作后 P,Q,R 中至少有两个数相等。综上所述,第 i - 1 次状态转移到第 i 次状态的状态转移方程只与第 i - 1 次状态下相同两数的值有关,故可以用滚动数组优化。设数组 p 为数组 a 的前缀异或和,则由异或的性质可知:p[i] = p[i-1]^a[i]。又因为, P,Q,R 的初始值为0且每次操作都将其中的一个数更新为其与 a[i] 的异或和,故进行了 i 次操作后,P。
2025-02-17 11:05:10
678
1
原创 洛谷 P2569 [SCOI2010] 股票交易
首先,不难看出,这道题应该用dp的思想,构造出一个,第一维表示天数,第二维表示拥有的股票数量的二维数组,关于状态转移方程,有以下几种情况:1.从本身开始,第i天购买j张票,即:dp[i][j]=-j*AP[i];2.直接继承上一天的数据,即:dp[i][j]=max(dp[i][j],dp[i-1][j]);3.从第i-W-1天购买k张票,即:dp[i][j]=max(dp[i][j],dp[i-W-1][j-k]-k*AP[i])(j-k>0且k<=AS)
2025-02-15 01:24:11
290
原创 洛谷 P6475 建设城市
只需要根据x和y的值分情况讨论分割数组的情况,然后将x和y下标的值从1~m遍历,求出各个区间的值的积后加到答案中即可。
2025-02-13 22:28:54
572
原创 异或序列 洛谷 - P4462 莫队
最后,遍历排序后的询问,用双指针移动表示元素的增减,进而计算出当前元素a删除或插入序列后,对符合条件的子序列的贡献(即序列内a^k的个数),记录答案输出,即可。若在一个块,则按照所在块的序号的奇偶性排序,奇数升序,偶数降序(减少指针移动次序,避免重复计算,保证左指针在一个块内单调递增时,右指针也在单调变化)1.设a[i]为前i项数的异或和,a[j]为前j项数的异或和,i>j,则a[i]^a[j]为[j+1,i]项的异或和。2.若a[i]^a[j]=k,则a[i]^k=a[j],加速求区间异或和的过程。
2025-02-12 00:58:05
483
原创 Great Cow Gathering G 洛谷 - P2986
选择一个节点为根,用dfs遍历每一个节点建树,那么每个节点到根的距离为父节点到根的距离+该节点到父节点的距离(根节点到自身的距离为0),并且顺便求出所需移动的总路程以及这个节点及其子节点的奶牛数量的和。题目要求输出以一个点为中心,奶牛走过总路程的最小值。暴力的解法,就是,求出以每一个节点为中心所需的总路程,然后输出最小值。求出一个节点的时间复杂度为O(n),那么n个节点就是O(n*n),这个复杂度是无法接受的,需要更新算法。
2025-02-11 21:29:25
190
原创 Codeforces Gym - 103261G
考虑到,数组从左往右交换,故对于第i个位置的最大值是与k相关的,应该要满足p[i]<=i+k-1,那么,k>=p[i]-i+1。而最小值则与k无关。故只要遍历数组,求出符合所有元素的k的最小值。
2025-02-10 00:50:42
208
原创 Imbalanced Arrays CodeForces - 1852B 的常规思路优化
综上所述,极端数据是判断数组b是否存在的必要条件,同时,去除后极端数据后对剩余数组的影响都是全局而非部分的,且极端数组下标对应的数组b的值是确定的,所以,可以采取递归的方式,通过不断判断和去除极端数据,构造出数组b。
2025-02-09 00:40:50
870
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人