- 博客(23)
- 收藏
- 关注
原创 【无标题】
Bessie 正在尝试使用她自己的排序算法对一个整数数组进行排序。她有一堆共 𝑁(1≤𝑁≤2⋅105)个整数 𝑎1,𝑎2,…,𝑎𝑁(1≤𝑎𝑖≤1011),她将会按排序顺序将这些数放入一个单独的数组中。她反复查找这堆数中的最小数,将其删除,同时将其添加到数组的末尾。Bessie 在 𝑝 个数的堆中找到最小数需要花费 𝑝 秒。Farmer John 命令了农场中其他一些奶牛帮助 Bessie 完成任务,她们很懒,然而 Bessie 利用了这一点。她将整数分成两堆:Bessie 堆和助手堆。
2024-07-11 20:06:06
618
1
原创 Easy(生成函数与组合数)
为什么我们要计算这个东西呢,假如最小值序列为(1,2,3),我们发现被(1,1,1),(1,1,2),(1,1,3),(1,2,1),(1,2,2),(1,2,3)各统计了一次,这意味着什么呢,意味着我们可以通过统计方案数进而统计贡献。也就是第一个数我们取a1=i,b1=j,那么贡献就是min(i,j),那么我们同理第二个数第三个数,那么展开后。第二种方法,我们不处理min,考虑到p值的计算是先乘后加,这与多项式乘法内涵一致,因此我们列出以下式子。,这样每一行,每一列都是关于x,y的等比数列,继续化简得。
2023-05-08 18:33:58
118
原创 Fascinating Partitions (dp优化,单调栈)
n个物品,划成k个连续段,每一段的贡献是这个区间最大的数,对k从1~n求最小和最大的贡献。
2023-05-08 17:38:51
141
原创 Unmerge
首先我们会发现一个结论,如果某个数属于a数组,那么在给定的序列中,从这个数开始,一直到下一个比它大的数为止,都属于a数组。根据这个结论,我们就可以将给定数组拆成若干分,那么原问题就相当于是询问能否从这若干份中选择一些使得长度为n。注意,这里这样思考的逻辑在于我们先试着用一个较强的规则去写这道题,然后考虑去除一些限制。题面很长,简要说的话就是将两个数组合并,合并规则是,两个数组最前面的数较小的加入新数组中,然后这个数从原数组中移除。现在给定一个长度为2n的排列,问是否存在两个数组合并之后是这样的排列。
2023-04-03 19:35:57
107
原创 区间dp学习笔记- The Sports Festival
首先我们在数列里找一个数放到第一个位置里,这个时候代价为零,然后再找一个数放进去,这个时候代价应该为两个数的差,略微调整顺序,使其从小到大排序,那么代价为第二个数减去第一个数,而放入第三,第四个数也是同理,这样的好处在于每次处理完之后代价总是最后一个减去第一个。dp的难点在于你要看出来这是一个dp,然后你还要想明白转移的过程,大部分时候dp写不出来是因为根本不知道这是个dp,然后才是其他问题,例如不会优化,转移方程不好实现等等。例如经典的石子合并,其要义在于将其相邻两段合并起来。
2023-04-03 19:08:43
54
原创 D. Rush Morning(欧拉序+线段树) 树的动态直径
Chiang loves cooking. There are N markets in her city. And there are N - 1 roads which make every market approachable from each other.Chiang always goes to buy food in morning. Due to limited time in morning, she starts from one market, passes every mark
2023-01-12 23:58:13
1176
原创 The Great Wall II[dp/单调栈优化]
那么接下来就是正题。,然后对于每一个j来说,dp【p】【j】都是可以提前计算出来的,而对于i,i增大时,后面那个值是不递减的,只会变得更大或者不变,而对于决策p来说,后面的值是不递增的,这样我们就可以大大缩小我们的决策范围,如果dp【p】【j-1】比前一个小,那么势必比前一个决策更优,反之比它大,由于maxx的对p不递增性,是无法保证哪一个更优的,而每一个i+1实际上只是比i多了dp【i】【j-1】项,因此我们就可以据此优化我们的dp。)个数,求分成k段的最小代价,每一段的代价等于这一段数组的最大值。
2022-10-06 19:37:55
333
1
原创 Equidistant
这样空间可能有点大。考虑到最后距离相同,那么在这个点第一次被访问的时候,标记相应的给定点到这个点的距离,那么之后访问的时候,我们就能知道这个点到那一次的给定点的距离和这个点到之前给定点的距离。考虑只有两个点我们怎么找,一个比较自然的想法是从这两个点开始“同时”进行bfs直到有一个点被这两个给定点访问,再考虑细节,我们肯定不可能同时bfs,我们实际上完全可以这个点先走一层,另一个点走一层,然后第一个点再走,第二个点再走,以此类推,我们会发现实际上就是bfs的时候预先把这两个点都放到队列里,然后bfs。...
2022-07-28 20:57:47
141
原创 Kingdom‘s Power
直接把叶子结点到1号节点的距离加起来肯定是不行的,那么如何减小呢,不妨设两个叶子节点的最小公共祖先是fa,叶子分别为x,y,我们发现1到x和1到y中的距离有一部分是重合的,重合部分就是1到fa的路径,那我们能不能让一个军队去走这一段路使得代价变小呢?不妨设dp[x]是到以x为根的节点的最小代价。1.y的军队能否去遍历x,将上面的讨论推广,如果能,代价为dp[y]+1,不能则为d[x],也就是这两者的较小值,那么多出来的军队所支付的代价为dp[y]+1+min(dp[y]+1,d[x])......
2022-07-28 15:33:45
162
原创 洛谷P3177 [HAOI2015] 树上染色
有一棵点数为n的树,树边有边权。给你一个在0∼n之内的正整数k,你要在这棵树中选择kk个点,将其染成黑色,并将其他的n−k个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的受益。问受益最大值是多少。...
2022-07-27 21:09:12
612
原创 P7793 [COCI2014-2015#7] ACM
他们的技术指导Goran想出了一个无敌的策略,用于解决决赛中的题目。一个简单的想法是进行搜索,但直接搜索百分百会T,如果将其记忆化,每一次则至多只有3*1.5e5种状态,记录一下就行。但是,有一些oj交这个代码会RE,我也搞不懂为什么,于是整了个dp,还是一样,先枚举每个人负责那一段,dp[i][j]就代表第一段到j为止的最小代价。的连续任务序列来思考。这种分配是为了使估计的难度之和最小,而只计算被分配到该任务的团队成员的估计难度值。题目大意很简单,就是枚举两个分段点,每一段不为空,求最小的代价。...
2022-07-14 20:13:36
211
原创 Boxers
题意:有n个相扑手,其中第i个相扑手的体重为ai,现在要挑选尽可能多的人去比赛,要求去的人他们的体重都不一样。并且每个人都可以改变1点体重分析:这道题初看挺简单,实际也很简单。不过有一点小坑,就是对于 8 9 9 10 10,如果直接让某个数占了自己的位置,那么对于这个样例来说可能就是 8 9 10 11 的数据,但实际上,我们应该优先考虑前一个的位置,这样就会是7 8 9 10 11 多了一个。但是如果直接在读入的时候处理,对于3 2 1 4这样的数据也没有办法。因此借用桶来装好数据后在处理。#
2022-05-23 15:45:38
117
原创 Complete the Projects (hard version)dp
题目描述The only difference between easy and hard versions is that you should complete all the projects in easy version but this is not necessary in hard version.Polycarp is a very famous freelancer. His current rating isrunits.Some very rich customers..
2022-05-22 19:28:42
142
原创 [USACO 2009 Dec B]Shorter Musical Notes
题目描述FJ is going to teach his cows how to play a song. The song consists of N (1 <= N <= 10,000) notes, and the i-th note lasts for Bi (1 <= Bi <= 120) beats (thus no song is longer than 1,200,000 beats). The cows will begin playing the so...
2022-01-14 22:39:07
238
原创 栈和排序
题目描述给你一个1->n的排列和一个栈,入栈顺序给定你要在不打乱入栈顺序的情况下,对数组进行从大到小排序当无法完全排序时,请输出字典序最大的出栈序列输入描述:第一行一个数n第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格输出描述:输出一行n个数表示答案,用空格隔开,结尾无空格示例1输入52 1 5 3 4输出5 4 3 1 2说明2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈思路:初看会感觉..
2022-01-14 22:27:49
969
原创 [NOIP2011]聪明的质监员
题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n个矿石,从1到 n 逐一编号,每个矿石都有自己的重量wi以及价值vi。检验矿产的流程是:1、给定m个区间[Li,Ri];2、选出一个参数W;3、对于一个区间[Li,Ri],计算矿石在这个区间上的检验值 Yi :Yi=∑j1∗∑jvjY_{i}=\sum_{j}{1}*\sum_{j}{v_{j}}Yi=∑j1∗∑jvj且wj≥W,j是矿石编号这批矿产的检验结果Y为各个区间的检验值之和。即:Y=∑i=1mY..
2022-01-14 22:07:25
243
原创 合并果子
题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少..
2022-01-14 21:37:04
1487
原创 好串 栈的运用
题目描述牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来:一开始,有一个空串,然后执行0次或者若干次操作,每次操作将ab插入当前的字符串根据上面的定义,ab, aabb, aababb都是好串,aab,ba,abbb并不是好串现在给你一个字符串s,判断s是否是好串输入描述:输入一行包含一个字符串,长度不超过50输出描述:输出"Good" 或者 "Bad"示例1输入
2022-01-14 21:13:29
274
原创 字符串与尺取
题目描述小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中,长度最短是多少。输入描述:一行一个字符串S。只包含小写字母。S的长度不超过106.输出描述:一行一个数字,代表最短长度。数据保证存在一个合法的S的子串。示例1输入ykjygvedtysvyymzfizzwkjamefxjnrnphqwnfhrnbhwjhqcgqnplodeestu输出49思路:这是一道标准
2022-01-14 21:02:43
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人