NOIP已经结束了,这个也就不再更了。
匹配最大异或(位运算,分治)
考虑发现如果把 \(0 —— 2^n-1\) 顺序考虑的话,会发现如果把区间分成两半,那么前一半的当前位上一定都是0,后面一定是1,且以后的位上前后一一对应且相同。
然后可以想到分治,大概会分为三种情况。
四个质数的和(思维)
直接先 \(n^2\) 预处理出分解成两个质数的和,然后直接暴力枚举拆成了哪两个数就行了。
长寿花(计数DP)
我们可以直接设 \(f[i][j]\) 表示第i层用了j种颜色的方案数,再设 \(g[i][j]\) 表示长度为i的序列用了j中颜色的方案数。
转移:
\(g[i][j] = g[i-1][j-1] * j + g[i-1][j] * (j-1)\)
\(f[i][j] = sum[i-1] * g[a[i]][j] * C(m, j) - f[a[i-1]][j] * g[a[i]][j]\)
大概可以理解一下,但是这样需要用 exlucas ,其实我们可以把组合数换成阶乘,然后就可以直接做了。
艰难睡眠(单调队列)
其实这道题的 \(n^2logn\) 的做法很好想,但是我们可以单独对于每个人考虑,断环复制双倍,直接单调队列搞就行。
T形覆盖(并查集)
题目链接
这道题当时一眼网络流,然后就偏离正解了。
一个板必须选择中心和四周的恰好3个。
你会发现如果两块板有两个公共点,那么只有一种方案,否则有多种方案。
我们可以把一块板所临的4个点用并查集连起来,并且维护里面的最小值。
变化的树(数据结构)
方法一: 单点查询,区间加等差数列,可以维护差分数组来解决,直接树剖就完了。
方法二: 拆式子后发现可以树状数组维护差分,而且dfn序的优秀性质,可以直接区间加。
斗地主(思维)
类似于连续攻击游戏,我们直接建图,这样如果是个环,那么都能选,否则,一定有一个点不能选。
然后直接双指针跑就行了。
简单题(规律)
其实这道题一些简单的结论很好找,比如 a + b + c 是个定值, a + b 是个定值。
其实这道题相当与一个取模操作,大概吧。
party(概率与期望)
这道题可以感性的知道概率越小应该猜的次数越多,但是我们并不知道具体的猜法。
秉承着概率题要设状态转移方程的理念,我们可以设 \(g[i]\) 表示小于等于i轮就全猜中的概率,设 \(f[i][j]\) 表示小于等于 i 轮 j 这个人被猜中的概率。
显然每次只会有一个 \(f[i][j]\) 变,我们只要找到变化哪一个对结果更优就行了。
因为收缩的非常快,所以大概模拟300000万次就可以了。
小Y的图(图论)
与货车运输基本一样,但是我却没有看出来。
关键在于它一定会走最小生成树上的边,然后倍增即可。
这道题显然也是一个可持久化并查集的板子,但是我并没有写出来。
小W的魔术(数学)
题目链接
如果看对题的话,不难想到答案的形式是把s串分成两份,一份是前缀,一份是后缀,然后我们就可以用组合数计算一下,但是这样显然会重复,然后我们可以强制去重,规定移走的那一位不能放原来的字符,这样就不重了。
组合(欧拉路)
题目链接
这道题其实是把欧拉路的板子题加了一层包装,然后我就没看出来。
关键在于建模,建完后直接跑板子就可以了,我们可以把每种字符当作点,对于一个单词 \(ab\) ,我们从a到b连一条有向边,然后只要保证每条边有且仅能经过一次就行了。
牛半仙的妹子Tree(图论)
这道题关键点在于转变思路,不是去暴力更新,而是在查询的时候判断求两点之间的距离和时间差来判断是否已经被传染。
然后就可以水到90分了,本来正解很麻烦,但是在暴力的基础上优化一下就可以过,而且复杂度基本上也是对的,具体优化思路是当一个点要被加入的无视序列时,如果它已经可以被其他点无视了,我们就可以不加入了,这样就保证了序列里的元素最少。
密州盛宴(思维)
这道题在考场上看到时表示没有任何想法,可能还是自己的思维方式有问题吧。
一些很显然的性质很好推,比如怎样是无解的。
然后我们会发现如果把最后一个0放到最开始(相当于把所有1往后移一位),这样可能会更优,所以我们可以一直进行这种操作直到合法为止(启发我们要把他们当作一个整体)
但是这样显然不可能过,然后我们就可以用后缀和搞一搞,大概就可以了(因为关键点不再这里,所以就不写了。)
[CTSC1997]选课(树形背包)
开启树形背包的好题。
树形背包最重要的是要规划好内层循环的顺序,否则会重复选择。
还要注意是否父亲节点需要必选,如果必选,那么需要进行特殊操作。
[中山市选]杀人游戏(tarjan)
思路比较好想,就是细节比较多。
关键处理在于对于那最后一个人的选择,因为最后一个人不用判断,其实容易发现只有入度为0并且它所连接的所有边不只是受到它的限制。
话虽好说,但是确实不好写,而且洛谷题解基本上全被 hack 掉了,而且我原来的代码也被 hack 了。
我个人感觉应该再加上一个 topsort 就可以了,这样就可以碾过 hack 数据了。
ZYB玩字符串(DP,字符串)
首先我们需要知道字典序不等同于题目中给的排序方法。
然后需要知道的是不能按照顺序只要匹配成功就删掉,这样会不对,比如 \(ababaa\),所以消除的顺序是一个要点。
本题的突破点在于既然不能按顺序来了,那么我们应该会想到区间DP,即 \(f[l][r]\) 表示这段区间是否可行。
但是我们会发现区间长度不一定是模式串的倍数,所以我们规定前缀合法就行。
难点在于转移方程,我们需要想到还有一种可能是先消掉连续的部分,剩下的部分与后面形成一个完整的串。
ZYB和售货机(图论,环)
个人感觉这道题与基环树没有任何关系,你会发现,每个点最多只有一个入度和出度,所以只能是链或环。
还有就是本题的突破点就在于正确建图,题目的限制保证每个点的入度不大于1,那么我们只需要让每个点连接最优代价的点,这样就可以保证每个点的出度不大于1。