- 博客(36)
- 收藏
- 关注
原创 2021江西省赛
会爆空间(n为x坐标,m为y坐标,k为走到该0的个数,n+m-1-k是1的个数,值表示方案数)。我们可以用map来存储当前已放入的编号和时间,如果已经存在相同编号,则删去并放入一个新的;又因为对该层有影响的只有上一层或本层,所以实际只用开两层滚动即可。所以先手只有第一回合击杀后手,或者留一滴血让后手自爆才能获胜。所以对时间有排序,并且要记录编号,用set存pair即可。而一旦先手的血量掉到斩杀线以下,后手发动攻击即可获胜。每个位置,只能从左边或上面转移,所以转移方程显然。二分答案+数据结构。
2026-03-26 18:33:03
45
原创 2023ICPC山东省赛
显然每次增加任意种类的员工都可能完成某个项目的某个条件,所以我们用map套一个小顶堆,前者记录员工种类,后者记录项目要求和对应id号,每次达标就判断一次对应项目的任要求是否全部完成。题目很清晰,一开始有一些员工和一些项目,每个项目要有对应种类和数量的员工才能完成,完成后获得对应种类和数量的员工。必有解,思路很简单,每次用大一圈的正方形去截已知图形,得到的都是L形。当某个项目的所有任务都完成,就可以解锁对应的奖励—新员工,然后循环即可。我的思路是按左下,右上,右下,左上的顺序。显然进行p次,范围长度为。
2026-03-14 12:41:40
618
原创 Edu143 CD
最后对于所有的n个3元组,我们可以选择n/2个组涂一红二蓝,另外n/2组涂一蓝二红,所以贡献*差分记录所有品茶师喝满的次数,最后计算的时候前缀和累加回来即可。思路:对每种茶二分出哪些品茶师能喝满,多余的给下一位。思路:容易发现,方案数和每组的3个权值类型有关。
2025-11-16 17:15:08
847
原创 Edu144 CD
其次可以令一个2变成3,比如第四个样例,4 8 16 32 64—>>>4 12 24 48 96。思路:题目要求k个数+x,其他数-x。我们可以先令所有数-x,再选k个数+2*x。思路:要想让集合长度最长,显然令倍数为2,那么可以容易得到最长长度为。然后如果两个2变成3或者一个2变成4,都会导致长度变短所以不可行。接下来求个数,首先是所有倍数都为2的集合,上界为。我们求出这种情况的上界。
2025-11-15 21:24:20
1327
原创 Edu145 CD
的数值我们可以得到1-3个子数组,比如k=7,我们还需要1个,只需要让?= -5,这样[2 2 2 -5]就是唯一多。类似的,如果k=8,让?会多出[2 2 -3]和[2 2 2 -3]两个正子数组。于是我们容易想到如果当前是10,为得到最终情况,考虑删去前面的1和后面的0,然后交换一次是最优解;思路:首先一个显然的结论:连续的n个正数可以得到$ n*(n+1)/2 $个正子数组。以5 7为例,算出n=3,我们先构造出2 2 2?如果当前是01,只需要删去前面的1和后面的0即可。
2025-11-14 16:43:25
444
原创 单调栈题目集
单调栈可以找往左往右第一个大于/小于a[i]的位置,可以找以a[i]为最大/最小值往两边扩展的最长区间(本质是找第一个大于/小于的位置,然后回退一步得到合法范围)
2025-10-30 15:43:31
1009
原创 CF1060 CD
至于情况二,特殊只在于改变了某个数x,所以我们在map中减去x的因数,判断x+1是否满足,最后加回来即可。由于不能连续删去,当我们已经删去一个偶节点且当前处于奇节点,并且下一次还想删偶节点,显然是最麻烦的操。题意:给定i个数和对应的操作成本,每次操作可以让数+1,使数组存在任意两数不互质的最小成本是多少?不互质即有公因数,我们可以考虑分解质因数,再用map记录,如果第二次出现,说明有重复可处理情况一。题意:小猫每次可以随机地走到当前的相邻节点,1表示走,2表示删去x节点。(最小的两个代价)。
2025-10-24 15:09:35
1462
原创 2022ICPC区域赛济南站
思路:考虑 a 需要比 a+1 先出栈,所以如果读到 a,发现 a+1 还没被记录则需要多建一个栈。现在多了一个/2操作,不确定中位数会是哪个,但能保证结果在这些数之间,所以暴力枚举求最小值。题目相当于在i i+k i+2k·····等位置上放置奇偶性相同的数,共有k个完整组。思路:一个trick:给定一个数组,通过 ±1 使所有数相同,最小操作是变成中位数。思路:先特判,k=1时除了n=1都不合法;然后因为k是奇数,对于放奇数的位置,我们分出k/2+1组;比如 如果设目标位x,起始位a,让a->x。
2025-10-19 23:23:50
665
原创 10.14 数论
当y=1,k=2,$ k_1 k_2$分别可为1 2;当y=3,k=4,$ k_1 k_2$分别可为1 4;互质,且题目给了c和d的值,所以我们只需要枚举y。思路:首先发现有lcm和gcd,可以容易想到。考察gcd,lcm的性质和素数筛。当y=2,y不是x的因子,略过。题意:给定c,d,x。比如对于样例1,1 1 3。,cnt为k的质因子种数。互质,因为如果不互质,因为前面我们已经推导出。保证k的每种质因数属于。
2025-10-15 19:44:28
636
原创 CF1057 BCD
思路:按位分类讨论,发现如果有且仅有两个数同一位为1,比如x y最高位为1,那么a b c最高位都要为1,但是那样又不能满足a&c在这一位为0了。再考虑可连接性,类比三角形两边之和大于第三边,我们分别考虑选一条奇数边和两条奇数边,都要保证最长的那条奇数边<其余之和。思路:先不考虑环形,考虑简单的链状,任意n可以拆成2x+3y,所以我们可以把数组拆成2、3的块相连。,cost1表示i-1操作到i的次数,cost2表示操作i-2、i-1、i相等的最少次数。考虑是否存在a&b=x,b&c=y,a&c=z。
2025-10-13 21:41:17
1189
原创 2024ICPC区域赛香港站
题意:给一个BW组成的n*m的二维图,每次从起点到终点只可往右往下移动画出一条线,线上的字符改变,问能否在400次以内将所有字符变成相同。思路:首先容易发现,只能删去L左边的字符或R右边的字符,所以如果L在首位或者R在末尾一定无法被删去。题意:给一个由 L R 组成的字符串s1,可以操作任意次:删去L左边的字符或R右边的字符。而其他情况都可以被删去,这意味着只要s2是s1的子序列,我们必然可以通过删去得到它。预处理一下s1每个位置的下一个 L R 位置,然后用s2模拟即可。签到,题目本质找出最大值的位置。
2025-10-10 21:50:23
935
原创 10.9 换根dp
发现改变后的贡献为: 2+3 +2+3+4 +1 这相当于dp[1]-siz[5]+(n-siz[5]);同理,我们将5转移为4发现: 2+3 +5+1 +1 相当于dp[4]-siz[4]+(n-siz[4])。我们以2,3->4->5->1为例,容易发现以1为根贡献相当于:2+3 +2+3+4 +2+3+4+5。如果转移5为根,原本5的子树2 3 4 5都变近了,只有它的上子树1变远。我们可以用dfs求出根的子树点权值和,用n减去就是它的上子树点权值和。奶牛那题差距在点权和边权。
2025-10-09 23:59:16
677
原创 Edu161 D、E 模拟+位运算构造
题意:给定n个怪物,a[i]为攻击,b[i]为护盾,每只怪物会受到相邻怪物的攻击,如果总攻击>护盾则死亡,输出n轮攻击各有多少只怪物死亡。我们可以举例找找规律,对于4可以构造[1 2],5可以在数列前加一个大数x [x 1 2],6可以在2前加 [1 x 2]。反之,假定ABCDE五只怪物,C死了,那么B受到C的攻击消失,加上受到D的攻击;题意:给定一个<1e18的整数n,构造一个含有n个递增子序列的数组,并保证数组大小<=200。然后联系n的二进制,从低到高位,如果当前位为1,则放入一个大数。
2025-10-07 23:54:32
937
原创 Edu164
题意:给定一个数组,每次可以选择连续的一段-k,问使得所有数变成0最少几次。依次输出k为1-maxn的答案。思路:我们考虑通过记录每个点的死亡点,即a[i]+1,来计算死亡后连续段的变化量。思路:我们容易想到对于任意一个集合,它的权值应该为。显然权值与当中颜色的球数有关,所以我们排序处理。记录用前几种颜色的 j 个球组成的子集数量。每次攻击次数即为当前的连续段数量。定义一个子集的权值为满足。
2025-10-06 00:00:13
895
原创 CF1055 C、D
每次可以选择i、j、k位置删去3个0或1,代价为min(j-i,k-j),求删完[l,r]的最小代价。题意:给定一个数组和k次询问。A可以对一个>=2的数a[i]/2,B可以让一个>=2的数a[i]+1。思路:先特判无解:选择的长度或者范围内01的个数不是3的倍数。其他情况下,最多只会出现1次代价为2的情况,其余情况都可以转化为代价为1。如果是2的幂+1,可以先/2,这样代价和上面一样也是。思路:首先我们知道如果一个数是2的幂,代价为。题意:给定一个01数组和k次询问。
2025-10-04 23:56:48
993
原创 Edu165
题意:A可以选择购买任意商品并卖出,B可以免费获得A的至多k件商品,A想利润最大,B想让A利润最小,A该怎么选择使得最终利润最大。我们定义a是成本,b是售出价。我们考虑一件商品如果A选了,利润=b-a,如果被B抢走,对A利润-(b-a)-a=-b元,所以B抢的就是A选的售价b最大的k件商品。容易想到,先预处理前i个商品的利润,从后往前枚举被B拿走的k件商品,为了保证亏损最小,我们每次踢出a最大的,放入a更小的。所以A相当于要先选k个让B选走,剩下的才是真正的利润。其次B选的k件必然是对A来说收益最大的。
2025-10-03 23:40:26
230
原创 Eud166
思路:首先合法序列的要求:我们假设’(’ 为1,')'为-1,序列合法则要求前缀和一定不为负数且总和为0。现在要求改变[l,r]的序列方向,如何确保改变之后仍然是合法序列?bal[i]表示1-i的前缀和平衡度。题意:给定一个合法括号序列,问改变[l,r]范围的括号方向之后还是合法序列的个数。所以我们枚举i,如果当前平衡度前面出现过,说明这些段合法可以翻转;要求在i属于[l,r]内,改变方向后的。,则不合法,我们删去这段l起始的数据。
2025-10-01 23:15:04
932
原创 9.30 按位贪心+dfs 模拟
我们通过双层循环暴力寻找度数满足的情况,考虑到有可能头部和尾部会同时连一条边,所以我们用标记,让头部连的标记1,尾部连的标记10,都连的标记11。最后11有多的再按需分配即可。不够则清空标记往下继续找。题意:给n点m边,找到一个头部连l条边,尾部连r条边的图案。**二、01Trie。**思路差不多,具体看代码实现。如果每个数这一位都是1,那么我们让x这位也为1;如果既有0又有1,我们考虑两种情况然后往下搜索。如果每个数这一位都是0,我们让x这位也为0;最小,输出这个最小值。注意细节,不要写炸。
2025-09-30 23:52:25
632
原创 9.29 按位分组/字典树+递归
因此我们容易找到这样一种方式:先将所有数按最高位分组,枚举每组数,答案=枚举组的数+比他高的组数+(如果不是第一组可以保留一个低位组),找到最大值就是可以保留的最大个数。当然还要注意,高位如果只有一个,只能连向低位,如果低位也只有一个,也只能连向高位,这样就互连成环了。容易发现,因为高位⊕低位始终>低位,而低位⊕低位始终<高位,这意味着如果有多个低位,他们会内部相连而不会向高位连边。比如1 3 9 10 17, 1和3互连成环,所以最多只能出现一个低位的组,对高位组无限制。,它会向序列中的满足。
2025-09-29 23:14:21
776
原创 9.28 字典树+dfs
题意:给定n个字符串,再给m个字符串询问,问每个在n个字符串中是否存在只有一个字符不同的字符串。考虑字典树建树,如何询问呢?题目给了只有abc三种字符,所以容易想到暴力dfs。
2025-09-28 23:43:15
532
原创 9.27 字典树+01Trie
我们可以通过枚举i,一个一个将a[i]加入Trie树,这样就相当于把i作为右端点去匹配满足的左端点,然后对于所有满足的左端点取最大值,那么l-r+1就是最小的。一样求异或和>=k,不过那个求的是数组个数,这个求数组最小长度,不过判断是否>=k的核心是一样的,关键在于怎么找到最小。而后缀是c,b->c,a->b->c,显然是两个。题意:给定字符串s1,前缀s2,后缀s3,找s1中以s2开头,s3结尾的子串数量。题意:给定n个数和一个k,求n个数中子数组异或和>=k的最小长度。因为是多测,注意清空即可。
2025-09-27 23:42:22
709
原创 9.26 二分+构造+01Trie
化简式子可以得到实际问题:构造一个数列,1-n每个数字出现两次,保证1- n-1这些数,每两个数之间距离恰好为n-i(i为数字)。题意:给定x为血量,y为终点。+n血(视为n次操作),或者选择休息+1血。可以c b a a b c这样构造出距离1 3 5的数列,然后由于对n无限制,在这中间插入一个n,就变成了2 4 6。思路:我们不难发现步长都是1,所以到终点走的步数是固定的,只是消耗血量不同,所以我们可以对休息的次数进行二分答案。连续t步的次数为mid + 1 - y % t,t+1步次数为y % t。
2025-09-26 23:56:09
668
原创 9.25 数论+贪心+01Trie 构造
其次,根据哥德巴赫猜想,一个>2的偶数可以拆分为两个质数之和,而且根据打表我们可以发现一个质数必然在1-n之内。从a-z找出现过的且能作为首字符出现的最小字符,恰好我们记录了它后面的字符,按顺序一直记录即可。题意:输入一个n,对于1-n染色,确保相同颜色的数字和为质数,问使用最少颜色方案。比如如果a后面是b,那么b就不能出现在其他字符后,a后也不能是其他字符。题意:给定一个n-1个数的数组,要求你构造一个1-n的序列b,保证。最后再判断,如果前面出现过的字符,但是答案没有出现那么输出NO。
2025-09-25 23:51:41
895
原创 9.24 贪心 构造
题意:给定一个字符串和整数n,确保每n长度的字符串都会出现在答案字符串中,求答案字符串的最小字典序。我们可以考虑通过已获得的字符来判断是否满足条件,当前可取的字符到上一个字符的距离如果>=n就无解。那么说明我们可以讨论26种情况即可,而对于每种情况我们都能选择大量的字符,既然已经获得字符了,除去选择所有小于当前的字符,如果等于当前,我们想的是选的越少越好,所以只有在必要的情况下选择。我们容易发现:如果选择了一个b,那么必然要选择所有的a保证这种情况字典序是最小的。,这是最小值,如果n比这还小一定无解。
2025-09-24 23:47:44
522
原创 9.23 构造+dp
然后对前者,想要最优,我们总是希望当前的右边会小于下一个的左边,所以我们对前者按y值小到大排序;如果我们想加入一个B联通区,可以在A区域单独加入一个,让A把B隔离出一个区域,以此类推。数据很小,可以直接枚举所有状态,然后类似处理最长上升子序列的模式处理。对后者,则希望当前的右边大于下一个左边,所以对后者按y值从大到小排序。考虑将50 * 50的方格切成4个25 * 25,分别存入ABCD。可以想到分类处理,将左边大于右边和右边大于左边分开。只需要注意放的时候,一个一个间隔地放不要相连。
2025-09-23 22:08:31
744
原创 9.22 一些构造
思路:只有没有出现的点对才有可能相等,所以我们找到一个没出现过的点对,让它们作为最小值1,2,这样能保证它们比其他数都更小,并让它们在b数组中=1,这样不会影响点对关系。考虑到第一个大于1e5的二的幂是1<<17,所以固定为1<<17 1<<18 1<<18^1<<17即可。这题是上课写的,思路出的很快,但是下课之后敲代码出现了各种各样的问题,调试纠错了半天,深感码力不足。思路:容易想到,连续操作两次,选择n-1个相同的位置,另两个不同,等价于将两个数变成相反数。第一列的每个数等于行异或,其他全部赋0。
2025-09-22 22:16:44
1137
原创 9.21 几个构造
容易发现答案只和最小那个有关,所以只要让长度最小的子数组满足就行,其他的位置按顺序填入。还有特殊情况,比如3列的情况下,3不能直接到4,说明相差为1也不一定就是正确的。如果还没有确定列数,那么第一个相邻之差d不为1且不为0的就是列数。数字排列只和列数有关,所以行数可以固定为1e9。这种情况下,更小的那个数一定是d的倍数,特判。如果后续的差值既不为1也不为d,说明无解。写复杂了,好像可以直接取模写。
2025-09-21 22:09:30
221
原创 Edu49 D 基环树+贪心
题意:老鼠可能出现在任意位置,给定一个a[i]表示陷阱消耗,b[i]表示老鼠到i之后下次到的地方。先求出从i开始的环,设一个为起点,在这个环中遍历找到最小的一个a[i]作为这个环的贡献。思路:如果老鼠陷入一个环,对于这个环我们只需要选出一个最小的a[i]陷阱就够了。
2025-09-20 23:49:58
242
原创 CF1050 F
题意:给n个长度不定的数组,你可以任意顺序堆叠,考虑重力的情况下,求堆叠后最底下一层按字典序最小的数组。每次排序后的第一个一定是我们需要的,比如第一次的第一个数组,如果不是最长的,就先全部存入答案。然后可以考虑截取之前长度后的数组,放入一个新的二维容器,反复排序存值。我们先找出所有数组的最大长度,最终数组长度一定是最大长度。思路:首先很容易想到排序就是字典序,具体怎么实现呢?
2025-09-19 10:45:18
331
原创 Edu182 A、D
因为是切成三部分,要求各部分之和%3值相同或都不同,如果想要有解,总和一定为 3 的倍数。(上取整),但这样对于每个原本没有的价格需要消耗 k 标签成本。如何判断是否已经存在呢?我们可以考虑用前缀和维护每段区间数字出现的次数。所以如果是 3 的倍数,一定有解且为任意两个点;思路:总收入=所有商品便宜之后的价格+消耗的标签成本。两者都不固定,但是都和 x 相关,我们发现。题意:给n个商品,你可以让所有商品价格变成。之后的数原本就存在,那么不需要消耗k。作为签到,暴力很好写。
2025-09-19 10:39:34
371
原创 2024CCPC区域赛哈尔滨站
M.Weird Ceiling签到。简化题意:f(a,b)f(a,b)f(a,b):如果 ddd 是小于等于 bbb 的 aaa 的最小约数,f(a,b)=a/df(a,b)=a/df(a,b)=a/d;C. Giving Directions in Harbin模拟。一开始想用 map 赋值比大小来表示转向,但是忘记这是环形,所以 wa 了。G. Welcome to Join the Online Meeting!bfs。写的有点史。入队顺序无所谓,所以先找一个非调试者入队。然后如果他邀请的人
2025-09-04 23:13:32
457
原创 2024ICPC区域赛昆明站
如果当前行数 i 为奇数,可以先打乱顺序,比如尝试第一个数不变,其余数字倒序;,减一是因为前面造成的一点伤害自己也会受到伤害,满足则说明这个随从会发动亡语。如果 i 为偶数,该行数字全部倒序,随便举一例可以显然证明满足题意。:顺序输出数字,行间数之和为奇数,列间数之和为偶数,3、如果一开始就单调递增, Alice 赢。然后从小到大排序,复制一份,确保范围内有。,Alice先手则可以调回获胜;的随从可以先造成一点伤害。,一定是 Alice 赢。,说明这个随从会发动亡语。,则 Alice必输。
2025-09-04 23:08:14
739
2
原创 2025CCPC陕西省赛
所以想到先将两种操作分开,按从大到小排序,然后 dfs 搜索找最大值即可。,说明我们不需要涂满,可以从前涂到连续段的起始,从连续段的末尾涂到后。可以发现添加字符能组成 lose 的字符串是有限的,不妨用。存储记录一下各种串的个数,放进堆里,枚举即可得到答案。思维题,首先容易发现最左端和最右端一定无法删除。首先首尾的连续段不用涂色,记录断开连续的首尾位。一个较大的数,对后续的增长更有利。,无私一只选 A,其余选 B,那么。,最后一行加上首尾两个数即可。,然后贪心地求能减少的值。的操作,求结果最大值。
2025-09-04 22:52:39
1242
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅