- 博客(54)
- 收藏
- 关注
原创 为什么vim是程序员最喜欢的文本编辑器
强大的插件生态系统:Vim拥有丰富的插件生态系统,用户可以通过安装插件来扩展Vim的功能,如代码片段、版本控制集成等。高效的键盘操作:Vim以键盘操作为主,使得用户不需要频繁切换到鼠标,可以更快地完成编辑任务。强大的编辑功能:Vim提供了丰富的编辑功能,包括多级撤销、宏录制、代码补全、语法高亮等,这些功能可以大大提升编写代码的效率和舒适度。综上所述,Vim因其强大的编辑功能、高度可定制性、跨平台支持、插件生态系统和高效的键盘操作,成为了程序员最喜欢的文本编辑器之一。
2024-07-21 13:14:23 224 1
原创 The BOSS Can Count Pairs
对于每个a[i]记录与它对应的b[i]。然后枚举a[i],用f数组记录每个选择的贡献,先求相同a[i]对应的b[i]的贡献,再求不同的贡献,注意每个循环最后f数组的处理。要求找到【i,j】的对数,使得1<=i<j<=n&&a[i]*a[j]==b[i]+b[j]。给定两个数组a和b,长度均为n。
2023-05-29 13:59:54 381
原创 Hyperregular Bracket Strings
给出n和k,有k组区间l,r,要求满足每个区间都是匹配的括号序列,且自己整体也是一个匹配的括号序列,长度为n,求满足条件的括号序列的数量,答案对998244353取模。匹配的括号序列的数量即卡特兰数,先用异或一个随机数来标记区间,然后利用异或前缀和来记录每个位置的贡献。
2023-05-29 13:59:37 226
原创 Copil Copac Draws Trees
给一个有n个节点的数,现在建树,要求当前边的两个点必须有一个点已经绘制完成,从1号点开始。如果两个点都未绘制过,则开始一次新的操作,问建成这棵树需要的操作数。其实就是模拟键边的顺序,先把每条边的序号记下来,然后对1号点的儿子进行dfs,如果对于每个点,如果当前点接入图的边的序号在其儿子节点之后,则操作数要加一。
2023-05-29 13:58:29 403 1
原创 Array merging
给出两个长度为n的数组a,b,现在每次可以取出任意一个数组的第一个元素,放到c数组的后面,c数组一开始为空,求c数组连续相等的最长子串长度。这里可以用两个map把a,b数组每个元素对应的连续相等的最长子串的长度存起来,然后找到最大值即可,具体看代码。
2023-05-29 13:57:23 255
原创 Codeforces Round 875 (Div. 2)A~E
然后枚举a[i],用f数组记录每个选择的贡献,先求相同a[i]对应的b[i]的贡献,再求不同的贡献,注意每个循环最后f数组的处理。给出n和k,有k组区间l,r,要求满足每个区间都是匹配的括号序列,且自己整体也是一个匹配的括号序列,长度为n,求满足条件的括号序列的数量,答案对998244353取模。如果两个点都未绘制过,则开始一次新的操作,问建成这棵树需要的操作数。给出两个长度为n的数组a,b,现在每次可以取出任意一个数组的第一个元素,放到c数组的后面,c数组一开始为空,求c数组连续相等的最长子串长度。
2023-05-29 13:56:21 334
原创 Bracket Coloring
这里可以用栈来匹配括号序列,因为可以反转,而且要颜色最少。对于合法序列,不难发现,最多只需要花费两种颜色即可,先全部初始化为颜色2,对于正向匹配的括号,染成颜色1,最后判断,如果存在颜色2,说明存在逆向匹配的括号,这时候再重新初始化为2,将逆向匹配的括号染成1即可,因为正向匹配的括号不兼容逆向匹配的括号,而逆向匹配的括号兼容正向匹配的括号。给出一个括号序列,定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列,现在要求染色,使得相同颜色的括号组成漂亮序列,问最少需要多少种颜色即每个括号染的颜色。
2023-05-26 15:39:39 200
原创 Best Binary String
给一个包含0,1,?可以换成0或1,要求换完之后使得成本最小,二进制字符串的成本定义为按非降序对字符串进行排序所需的“反转字符串的任意连续子字符串”形式的最小操作数。因为每次操作是反转连续子字符串,即反转一个区间,所以一个1或0与连续的一块1或0的操作数都是一样的,所以只需要把?替换成与前面一样的即可。
2023-05-26 15:39:00 175
原创 Educational Codeforces Round 149 (Rated for Div. 2)A~D
这里可以用栈来匹配括号序列,因为可以反转,而且要颜色最少。对于合法序列,不难发现,最多只需要花费两种颜色即可,先全部初始化为颜色2,对于正向匹配的括号,染成颜色1,最后判断,如果存在颜色2,说明存在逆向匹配的括号,这时候再重新初始化为2,将逆向匹配的括号染成1即可,因为正向匹配的括号不兼容逆向匹配的括号,而逆向匹配的括号兼容正向匹配的括号。给出一个括号序列,定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列,现在要求染色,使得相同颜色的括号组成漂亮序列,问最少需要多少种颜色即每个括号染的颜色。
2023-05-26 15:38:49 254
原创 Say No to Palindromes
因为要不存在长度大于等于2的回文子串,所以相邻的字符不能相同,又因为字符串只包含abc三种字符,所以不难发现,字符串只能由"abc"“acb”“bac”“bca”“cab”"cba"这六种子串组成,因此可以令f[j][i]表示前i个字符,当前匹配第j种子串,不合法的字符数,即需要的操作数,对于每次询问,枚举6种子串, ans = min(ans, f[j][r] - f[j][l - 1])即可。例如,a只能变成b或c。
2023-05-25 19:37:05 61
原创 Product 1 Modulo N
考虑1~n-1中那些元素可以选,如果x与n不互质,即gcd(x, n) == gcd(x % n, n)!= 1.因此子序列元素的乘积得与n互质,所以考虑选择1~n-1中与n互质的元素,gcd(x, n) == gcd(x % n, n) == 1就符合题意,如果最后x % n不为1,那只要把x%n这个元素去除即可。设x % n == p, 则除了p之外的乘积为ans, ans * p % n == p, <=> ans % n == 1.给一个n,(2<=n<=1e5),找到排列[1,2,…
2023-05-25 19:35:12 92
原创 Add One
给一个数n, 有m次操作,每次操作把n的每一位加一,例如1912操作一次后变成21023.问操作m次后,数字的位数。(k<=m),然后把n的每一位操作后的长度加起来即可。可以初始化0~9每一个数字操作k次后的位数f[i]
2023-05-25 19:33:42 112
原创 Forever Winter
求每个点的度,最内圈的分支的度是唯一的,找到即可,设为x,然后第二圈的分支为(n-1-x)/x,n为总共节点上,减去中间节点和第一圈的分支就只剩下最外圈的点,然后再除第一圈分支数就是第二圈的分支。还有一种特殊情况,就是第一圈分支和第二圈分支相同,这样第一圈的度就不唯一的,加一个tem特判一下就行,具体看代码。给一个像下面这样的图,要求第一圈分支和第二圈分支,下图的第一圈分支为5,第二圈分支为3.
2023-05-24 17:30:18 153
原创 The Lakes
给一个n * m的矩阵,定义湖的深度为a[i][j]大于0,为0的是陆地,要求湖深度和,求最大的深度和,湖是往上下左右四个方向扩散的。简单递归题,递归找湖,找到最大深度和即可。
2023-05-24 17:27:11 218
原创 Codeforces Round 871 (Div. 4)G. Hits Different
l = l - fl, r = r - fl + 1, fl为当前层,当然,要考虑边界情况,l = max(s[fl - 1], l - fl), r = min(s[fl] - 1, r - fl + 1). 至于求区间分数和,可以用前缀和的方法求,具体看代码。给一个如图所示的三角形,输入n,击倒方块n,获得分数n*n,同时方块n上面的两个方块也会落下,同时获得这两个方块的分数,一直向上走,知道方块1,如图所示为n=9的时候掉落的方块,求获得的分数。然后维护每一层的区间l,r。
2023-05-24 13:18:01 145
原创 Codeforces Round 871 (Div. 4)H. Don‘t Blame Me‘
选a[i]: f[i][j & a[i]] = (f[i][j & a[i]] + f[i - 1][j]) % mod;不选a[i]: f[i][j] = (f[i][j] + f[i - 1][j]) % mod;给一个数组,在其中找按位与和等于k的子序列,求子序列的个数mod 1e9 + 7。动态规划,设f[i][j]表示在前i个数里面选,按位与和为j的子序列个数。
2023-05-24 12:59:32 142
原创 Ksyusha and Chinchilla
给一颗树,你可以删除其中的边,问你能否通过删除边,使得这颗树变成若干个由三个点组成的块,如果可以输出删除边的编号,如果不可以输出-1.深搜,返回的时候每遇到三个点就切一刀,如果返回的时候遇到大于3个点了,那就直接输出-1,像这种。.如果最后返回到根节点,点数不够3,也输出-1,
2023-05-20 12:14:53 312
原创 Ira and Flamenco
先记录每个数出现的次数,再用set给数组排序去重一下。对于合法的m个数,其选择方案数就是每个数的数量乘起来。然后枚举每个合法区间即可,求区间方案数,可以用前缀和来求,具体看代码。给一个数组,你要选m个数,且其中最大-最小要小于m,求方案数mod1e9+7。
2023-05-20 12:13:08 255 2
原创 Flipper
因为n <= 2000 ,所以可以暴力,因为字典序要最大,所以得找到最大的数,把它放到最前面,因此,选择的区间右端点r得固定在最大数前面,因为必须要进行一次操作,所以最大数因该从i==2开始找,找到右端点后,枚举左端点l即可。给一个排列,要求做一次操作,选择一个区间,翻转区间中的数,同时区间前面的数全部挪到后面去,区间后面的数全部挪到前面去。求操作后的最大字典序,输出最大字典序的排列,n <= 2000。
2023-05-20 12:12:24 76
原创 Round Dance
首先用并查集将a[i]和i连起来,然后每个联通块都是一组舞蹈,最多数量就是联通块的数量,因为每个人可以找两个人组合,所以环是无法再拉入人的,因为每个人都有两条边,而当一个联通块里面有链,它就可以与其他的包含链的联通块组合起来。所以最小数量就是成环的联通块,如果有存在链的联通块,就再加一,因为链可以合并起来。现在有n个人,每个人记得一个邻居,每个人可以找两个人跳舞,跳舞最少要两个人,每个人都要跳舞,首先他要去找他记得的邻居a[i],然后还可以再选一个人连起来。问最少和最多可以有多少组舞蹈。
2023-05-20 12:12:02 163 3
原创 Restore the Weather
因为题目保证有解,所以只要最小的a对应最小的b,第二小对应…可以将a,b排序,然后按照大小一一映射。给出a,b两个数组和k,现在要重新排列b,使得|a[i] - b[i]|
2023-05-20 12:10:35 292 1
原创 Vlad Building Beautiful Array
偶数可以减奇数,变成奇数,所以只要最小的偶数大于最小的奇数即可,因为奇数只能减奇数变成偶数,所以最小的奇数无法变成偶数,所以机速变偶数是行不通的,最后特判一下全是奇数或全是偶数即可。给出一个数组a,a[i]可以-=a[j],j随便取,问a数组能不能变成全部元素大于0且都是奇数或都是偶数,可以输出YES,不能输出NO。
2023-05-20 12:10:04 100
原创 Codeforces Round 874 (Div. 3)(A~G)
首先用并查集将a[i]和i连起来,然后每个联通块都是一组舞蹈,最多数量就是联通块的数量,因为每个人可以找两个人组合,所以环是无法再拉入人的,因为每个人都有两条边,而当一个联通块里面有链,它就可以与其他的包含链的联通块组合起来。因为n <= 2000 ,所以可以暴力,因为字典序要最大,所以得找到最大的数,把它放到最前面,因此,选择的区间右端点r得固定在最大数前面,因为必须要进行一次操作,所以最大数因该从i==2开始找,找到右端点后,枚举左端点l即可。.如果最后返回到根节点,点数不够3,也输出-1,
2023-05-20 12:06:55 212 1
原创 加快unordered_map的速度
在用unordered_map的时候,有一些数据会让umap变得非常慢。这时候加入一下代码,可以让unordered_map的速度提升很多。
2023-05-15 17:53:44 368
原创 Codeforces Round 873 (Div. 2)
i,要求找到一个最大的k,你可以交换a[i]和a[i + k],使得a[i] == i。对于a[i],在b中找到第一个大于等于它的数,前面的小于它的位置都可以放a[i], 但是得减去前面已经放了数的位置。随后对于每个位置i,找到它前面的合法区间和后面的合法区间,ans减去前面的合法区间*后面的合法区间。随后对于每个位置i,找到它前面的合法区间和后面的合法区间,ans减去前面的合法区间*后面的合法区间。先初始化答案,即对于每个i,ans += (i - 1) * ((i - 1) + 1) / 2。
2023-05-15 13:36:50 556 2
原创 Range Sorting (Hard Version)
随后对于每个位置i,找到它前面的合法区间和后面的合法区间,ans减去前面的合法区间*后面的合法区间。先初始化答案,即对于每个i,ans += (i - 1) * ((i - 1) + 1) / 2。即等差数列求和,把所有合法不合法的花费都加起来,后面再把合法的减去。给出一个数组,对所有子数组,找到其中的非升序区间r,l。其花费为r - l。对于前面的合法区间可以用单调栈先找到区间的右端点,然后再用二进制倍增的思想找到左断点。至于每个位置后面的合法区间,可以用r数组代替,可以用单调栈的方法先预处理好r数组。
2023-05-15 13:35:41 289
原创 Range Sorting (Easy Version)
随后对于每个位置i,找到它前面的合法区间和后面的合法区间,ans减去前面的合法区间*后面的合法区间。先初始化答案,即对于每个i,ans += (i - 1) * ((i - 1) + 1) / 2。即等差数列求和,把所有合法不合法的花费都加起来,后面再把合法的减去。合法即升序,不合法为非升序。给出一个数组,对所有子数组,找到其中的非升序区间r,l。其花费为r - l。
2023-05-15 13:34:41 262
原创 Permutation Swap
给一个排列,a[i]!= i,要求找到一个最大的k,你可以交换a[i]和a[i + k],使得a[i] == i。找到每一个数的交换长度abs(a[i] - i),求gcd即可。
2023-05-15 13:33:13 112 3
原创 Counting Orders
对于a[i],在b中找到第一个大于等于它的数,前面的小于它的位置都可以放a[i], 但是得减去前面已经放了数的位置。给出两个数组a和b,求a数组有多少中排列使得a[i]>b[i],输出排序方案数mod (1e9 + 7)。即把所有位置的方案数都求出来,相乘即可。先对a和b按从小到大排序。
2023-05-15 13:33:01 163
原创 Divisible Array
给一个n,要求创建一个数组,使a[i] % i == 0 且数组和sum % n == 0;令a[i] = 2 * i即可。
2023-05-15 13:31:28 124
原创 Lunatic Never Content
找到对称的数,如果要mod x之后相等,x = abs(a[i] - a[n - i + 1]),这样mod之后两个数就会相等,因为x要大,所有对每对数的x求gcd即可。给一个数组,要求找到一个x,使得数组中每个数mod x之后回文,x尽可能大。
2023-05-14 21:51:17 133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人