- 博客(406)
- 收藏
- 关注

原创 一个菜鸡的ACM之路
花絮做为一个大三计软狗,那么菜,打完19年的区域赛,也没时间打20年的区域赛了吧。这个学期,是我的第一次,也是最后一次,打CCPC和ICPC,忙前忙后,共打了3场;打完后,又去赶各种死亡DDL;DDL赶完后,又是死亡期末考。于是,一些关于ACM的个人总结之类的,就拖到了现在。菜鸡文笔也不好,但ACM3年过来,多少得有点仪式感,记录点什么吧。大一 刚进来那会,进了计软,0基础,啥都不会,啥...
2020-01-17 16:33:28
1835
3
原创 D1. Range Sorting (Easy Version)
对于区间[l,r],设l<=l1<l2<=r,如果a[l1]>a[r],a[l2]>a[r],那么为了最小开销,我们选择最大区间[l1,r]进行排序。我们可以枚举所有的相邻点(a[i],a[i+1]),计算对于右边界为a[i+1],a[i+2],…,a[n]时,分别需要移动多少元素,定义数组a的连续子数组为,选择下标1<=l<=r<=n后,截取的子数组a[l],a[l+1],…每次操作,可以选择一个区间,l,r,并将数组的区间[l,r]进行升序排序。给定数组a,求它所有连续子数组的美丽值之和。
2023-05-17 22:38:01
838
原创 D1. Red-Blue Operations (Easy Version)(贪心/思维)
为了确保在应用最后n次操作的时候,元素之间的变更最少(这里需要理解下,因为我们要求的是数组的最小值,因此,需要确保整体增加的时候,是相对均匀的)。经过res次-1操作后,数组a’则变成所有元素都相等了,那么之后,每n次-1,我们的数组最小值都会-1。我们可以把前面k-n次操作,拆分成(+1,-2),(+3,-4)…q个查询(1<=q<=1000),每次查询,给定整数k(1<=k<=10^9)当k<=n时,我们贪心地把每个操作,应用到最小的k个元素,即可满足。我们把前n大的元素,累加,应用到这n个元素。
2023-05-15 08:27:07
492
原创 C. Contrast Value(贪心/思维)
数组b为数组a的子数组,当前仅当我们可以从数组a中删除若干元素,按顺序拼接得到。给定长度为n的数组a,求它的一个子数组b,使得数组b和数组a的绝对值相等。因此,我们先给数组去重。去重后,考虑两端元素,其次,再考虑。特别的,长度为1的数组,绝对值为0.求出能满足条件的数组b的最小长度。定义一个数组a的绝对值为。
2023-05-14 17:05:29
283
原创 B2. LuoTianyi and the Floating Islands (Hard Version)(树/组合数学/概率论)
当k等于3时,不妨设它们为a,b,c,我们将它们之间的路径两两相连,那么三个节点必定有一个为中间节点,不妨设为a,此时,a显然是好节点。证明:假设a为好节点,且它的子树上的染色节点数h小于k/2,假设它的父节点为p,当我们将节点从a迁移到h时,新增的距离 代价为 h - (k-h) = 2h-k <0,说明p节点更优,与a是好节点矛盾,得证。利用该结论,我们可以用排列组合的方式,枚举所有的节点i,从节点i的子树取k/2节点进行染色,再从排除i的子树的剩余节点取k/2节点染色,就是。对应的期望好节点个数为(
2023-05-13 00:01:42
498
原创 C. LuoTianyi and the Show(贪心)
如果想要同时利用-1和-2呢?类似的,考虑只用-2(不妨表示-2的数量为second),不用-1的情况,那么此时,我们可以贪心地,从左往右填充,此时最多填充数量为 min(second + h, m)再考虑只用-1(不妨表示-1的数量为first),不用-2的情况,那么此时,我们可以贪心地,从右往左填充,此时最多填充数量为 min(first + h, m)我们枚举做为标准杆的位置,并预处理,计算每个标准杆,前面和后边的空闲坑数量left[i],right[i],从而计算出该场景下能填充的最多人数。
2023-05-09 22:26:04
852
原创 D. Unique Palindromes(回文串/构造)
证明:假设 长度为len的前缀子串新增的回文串,最大长度为mx,那么表示s[len-mx+1, len-mx,…,len]是回文串,假设存在另一个新增的回文串,长度为mx2 < mx,那么表示s[len-mx2+1, len-mx2,…,len]不是新增的回文串,矛盾。对于长度>3的前缀子串(假设长度为len),它的回文子串的个数,相比长度为len-1的前缀子串的回文子串数,最多增加1。结合规律1和规律2,我们可以得出结论,对于长度len>3的字符串,它的回文子串的个数,不超过它的长度len本身。
2023-05-04 22:25:17
542
原创 Tear It Apart(思维/字符串)
如果已知我们最终要保存的字母类型,那么我们可以将原字符串以“要保存的字母”为边界切割,计算每个子串全部删除需要的操作次数,取最大的即可。从字符串中,选择下标不相邻的元素,进行删除,删除后将剩余字符串按照原来相对顺序拼接起来。因此,我们枚举每个字母,计算每种场景下需要操作的最小次数,取最小值。考虑一种场景,要把长度为len的字符串全部删除,最少需要多少次。问,最少需要操作多少次,使得剩余元素都相同。欢迎关注同名GZH:对方正在debug。
2023-04-27 07:14:59
204
原创 Sort the Subarray(思维/排序)
我们可以找出左边第一个取值不同的边界(a[l]!=a2[l]),以及右边第一个取值不同的边界(a[r]!a=[6,7,3,4,4,6,5], 选定l=2,r=5,那么排序后的a2=[6,3,4,4,7,6,5]。已知一个数组a,我们可以选择它一个下标范围[l,r]进行升序排序,得到数组a2。如果存在多组解,选择下标范围最长的;如果下标范围最长的有多组解,输出任意一解。特判:我们需要考虑a和a2完全相等的场景,此时题目转换为最长有序 连续子数组。现给定数组a和a2,求出原来的下标范围l,r。
2023-04-26 17:28:11
209
原创 D. Ela and the Wiring Wizard(最短路径/floyd)
题目参考题意给定一个带权无向图,n个点,m条带权无向边。要从点1走到点n。走之前,可以执行以下操作对于连接点u,v,边权为w的边,可以将它从点u移除,并连接到任意一个与v相邻的点(点v也可以与自己相连)。但需要花费的时间为w单位。可以执行以上操作任意次。问,执行了上述若干次操作后,从点1走到点n,需要的最短时间是多少(包括修改边时花费的时间)。思路定理1:点1到点n的最短路径,经过的边,边权一定相同。反证法:如果点1到点n的最短路径,存在两条相邻的边,边权不同,w1,w2,不失一般性,
2022-10-10 22:48:35
541
原创 D. Prefixes and Suffixes(字符串/思维/回文串)
题目参考题意给定2个长度为n的字符串s1,s2。给定操作:选择整数k<=n将字符串s1的前k个元素,和字符串s2的后k个元素,做交换。比如n=5, k=2,则s1[1,2], s2[4,5] = s2[4,5], s1[1,2]可以执行上述操作任意次,问最终,s1和s2能否相等。相等输出YES,否则输出NO思路我们观察发现,字符串s1的第i个元素和字符串s2的倒数第i个元素,1<=i<=n,我们发现,这2个元素的相对位置都保持不变。因为每次交换,s1的第i个元素(i&
2022-10-06 22:44:35
735
原创 D. Permutation Addicts(图论/bfs)
题目参考题意给定长度为n的数组a和整数k,0<=k<=n。根据以下规则计算数组b对于1<=i<=n,令x=a[i]如果x<=k,令b[x]为最后一个元素a[j] (1<=j<i) ,使得a[j]>k,如果不存在该a[j],则令b[x]=n+1;如果x>k,令b[x]为最后一个元素a[j] (1<=j<i),使得a[j]<=k,如果不存在该a[j],则令b[x]=0。现在已知b数组,求k和a数组。如果有多个a满足题意,输出任
2022-10-06 22:44:07
630
原创 C. Minimum Notation(简单思维/单调栈/逆序对/归并排序)
题目题意给定一个数字字符串,给定操作每次操作,可以选择任意一个位置上的字符d,将该字符更新为d=min(d+1,‘9’),并将它移动到任意位置:可以移到任意两个字符中间,也可以移到最前面和最后面。问经过任意次上述操作,能得到的最小字典序的数字字符串是多少。常规思路对于逆序对i<j,s[i] > s[j]为了字符串字典序更小,需要将第i位和第j位交换。可以选择移动i,也可以选择移动j,由于移动时,对应的字符会加1,我们选择牺牲更大的i,来保全j。贪心策略,对于每个存在逆序对
2022-09-27 08:46:35
553
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人