
搜索
C202044zxy
这个作者很懒,什么都没留下…
展开
-
[unknown OJ] ZZH与背包
一、题目点此看题二、解法一看就是折半搜索,但是左边要排序右边要二分的,O(220×qlog)O(2^{20}\times q\log)O(220×qlog)这种题往往就是卡掉排序的复杂度,我们可以考虑用归并排序来卡。假设我们维护的是一个有序数组,那么我们加一个 vvv 的时候这个数组就变成了两个。一个是原来的数组,一个是每个元素都加上了 vvv 的数组,那么这两个数组就可以用归并,所以第一部分的复杂度变成 O(2s)O(2^s)O(2s)第二部分其实也可以用归并,一共有 q2n−sq2^{n-原创 2020-12-02 09:47:58 · 436 阅读 · 0 评论 -
[雅礼集训 2017 Day7] 蛐蛐国的修墙方案
一、题目点此看题二、解法想不到吧,朴素的搜索都有 808080 分。我们仔细想一想, 其实给出了若干个环,对于一个环如果确定了一条边那么这个环就可以确定了。我们枚举每个环的某一条边,这样时间复杂度是 O(2n/2)O(2^{n/2})O(2n/2)注意有解必须要求偶环,所以只会有 2,4,6....2,4,6....2,4,6.... 圆环,然后 222 圆环是极其特殊的,可以把在前面的那条边定成左括号,后面的那条边定成右括号。这样只有 444 圆环及以上,时间复杂度 O(2n/4)O(2^{n/原创 2020-11-25 16:24:15 · 297 阅读 · 1 评论 -
[LOJ 6254] 最优卡组
以前是写过的,但现在旧题重做又有了新的体会!一、题目点此看题二、解法先讲一种我自己 yy\tt yyyy 的做法,虽然是错的,但是有启发意义。爆搜是不可能爆搜的,∏ci\prod c_i∏ci 是不可能爆搜的,这种题一般需要用优先队列爆搜。但这种方式很苛刻,必须要同时满足两个条件:不会算重,权值总和从大到小,下文主要解决这两个问题。我们定义三元组表示 (x,y,s,z)(x,y,s,z)(x,y,s,z) 搜到第几个卡组的第几张牌,sss 表示卡牌权值总和,zzz 表示是否能计入答案(因为我的原创 2020-11-25 11:09:05 · 325 阅读 · 0 评论 -
CF788C The Great Mixing
一、题目点此看题二、解法把浓度减nnn,那么就不需要考虑选出来的个数了,只需要和为000就行了。不能用完全背包,因为答案可能选出100010001000,考虑一种类似于bfsbfsbfs的扩展方法,每个点只扩展一次,每次用所有的点扩展,这样就能保证操作在[−1000,1000][-1000,1000][−1000,1000]以内了,所以时间复杂度O(10002)O(1000^2)O(10002)#include <cstdio>#include <queue>#incl原创 2020-07-27 21:57:59 · 256 阅读 · 0 评论 -
CF243C Colorado Potato Beetle
一、题目原创 2020-07-27 21:47:14 · 261 阅读 · 0 评论 -
CF590C Three States
一、题目点此看题二、解法联通三个国家,换一个角度说,就是让三个国家在某一个点集合。预处理每个点到最近原创 2020-07-27 21:31:56 · 211 阅读 · 0 评论 -
CF662B Graph Coloring
一、题目点此看题二、解法刚开始一看可能没有什么思路,但是这个问题很像染色,原创 2020-07-27 08:55:31 · 183 阅读 · 0 评论 -
CF877D Olya and Energy Drinks
一、题目点此看题二、解法考察搜索的优化,我们把访问标记设置成每个位置是从哪个方向来的,而不能直接标记,这是为了使kkk那部分的移动是连续的(一旦访问过就不用再做了,这样每个位置只能被访问一次),考虑下图:如此图,他们在bfsbfsbfs的同一层,假设红先访问并标记,如果我们的标记不考虑方向那么就不满足上述的性质。#include <cstdio>#include <queue>using namespace std;const int M = 1005;int r原创 2020-07-26 21:58:40 · 915 阅读 · 0 评论 -
CF540C Ice Cave
一、题目点此看题二、解法ppl yyds\text{ppl yyds}ppl yyds好巧的一道搜索题,可以分类讨论,如果终点是X,那么直接bfsbfsbfs。否则一定会走到周围一个好点再走回去,我们就枚举这个好点,暂时把它弄成坏的,看能不能跑到终点。#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>using namespace st原创 2020-07-26 16:13:37 · 225 阅读 · 0 评论 -
CF333E Summer Earnings
一、题目点此看题原创 2020-07-24 16:40:44 · 222 阅读 · 0 评论 -
CF912E Prime Gift
一、题目点此看题二、解法原创 2020-07-16 21:15:27 · 152 阅读 · 0 评论 -
CF1257F Make Them Similar
一、题目点此看题二、解法meet−in−middlemeet-in-middlemeet−in−middle我们把每一位拆开来看,那么最后111的个数就等于原来的个数和修改的叠加,如下图:这些操作都是独立的,可以考虑前151515位和后151515位暴力枚举,再用相遇中间的算法。实现不就简简单单吗#include <cstdio>#include <vector>#include <map>using namespace std;const int原创 2020-07-16 21:09:37 · 210 阅读 · 2 评论 -
[清华集训2014]玛里苟斯
一、题目点此看题二、解法注意到答案是2632^{63}263次方,可以分kkk来讨论:k=1k=1k=1,求出所有值或起来的值,每一位有12\frac{1}{2}21的概率有贡献,所以把这个值除以222即可。k=2k=2k=2,枚举i,ji,ji,j,考虑贡献是 2i+j×p2^{i+j}\times p2i+j×p,ppp是i,ji,ji,j同时有值的概率,考虑aaa中0有没有101010或010101(是i,ji,ji,j位上有没有值),如果有的话ppp是0.250.250.25,否则ppp原创 2020-05-12 21:07:37 · 357 阅读 · 0 评论 -
[SDOI2015]排序
一、题目点此看题二、解法首先考虑操作顺序对答案的影响:举个例子:1 2 3 4 5 6 7 8,现在有长度222和444的两种交换方式。第一种方案,先用222:5 6 3 4 1 2 7 8,再用444:1 2 7 8 5 6 3 4第二种方案,先用444:5 6 7 8 1 2 3 4,再用222:1 2 7 8 5 6 3 4不难发现只要一个从小到大(指影响的长度),个数为xxx的操作序列合法,那么有与之对应的x!x!x!种不考虑顺序的操作方法均能合法。这个结论应该是很容易理解的,这给我们原创 2020-05-09 21:37:56 · 188 阅读 · 0 评论 -
序列 sequence
原创题,没有提交的地方。一、题目众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:勇太有一个长度为 n 的数列,现在六花可以从中选出若干个数(不可以不取)。她的方案需要满足她选出的所有数的平均数小于等于中位数。现在勇太想让六花求出满足条件的方案数。注:数列长度为偶数的时候,中位数为排序后最中间的两个数的平均数。当然,这个问题对于萌萌哒六花来说实在是太难...原创 2020-05-05 15:43:17 · 245 阅读 · 0 评论 -
跳格子
一、题目二、解法这道题不需要字符串的dijkstradijkstradijkstra,我们先找出能跑到nnn的点,可以通过建反向边再跑bfsbfsbfs完成。然后根据这个去dfsdfsdfs,我们先选aaa操作,跑到被染色的点就直接继续dfsdfsdfs,否则尝试bbb操作,如果有一个点被两次访问到,那就说明进入了循环节,输出Infinity!Infinity!Infinity!。#in...原创 2019-12-14 15:50:45 · 537 阅读 · 0 评论 -
华容道
一、题目点此看题二、解法考虑爆搜,可以直接移动空白格,据说可以移动空白格。爆搜为什么这么耗时呢?因为爆搜扩展了很多无用的状态,其实空白格不在指定棋子的周围的状态是无用的,我们可以选择性的扩展空白格在指定棋子旁边的状态,这样就达到了减少搜索范围的效果。由于移动到指定棋子的周围的状态不是连续的(bfsbfsbfs难以做到),我们可以用图论的方式来写,由于要点实在很多,文字表达出来太难了,可以...原创 2019-10-07 16:16:23 · 242 阅读 · 0 评论