Topcoder SRM 100 场计划

SRM 550 Div1 250 按题意模拟,注意判断边界是否被访问时,以后的路径不能算上
SRM 550 Div1 500 一道找规律题,打个表
SRM 550 Div1 1000 矩阵快速幂题,每个位置是该位置需要多少次才能转到目标态,先让他转到目标态的贡献减去之后,剩下就只剩下自己转圈的贡献了,我们发现这样的贡献在每个位置都相同,就可以算出最大旋转次数. 然后状态就是 有多少个需要两步到目标态,多少个一次,多少个0次,这个状态是n^2的,直接转移即可,多开一维记录每次全0的贡献和即可.
这种看上去转移单一的题,主旨是先找到共同点,转化成转移相同的状态.然后合并多余状态,进行矩乘优化.

SRM 551 Div1 250 暴力判断贪心…
SRM 551 Div1 450 Floyed 建图是从i直接到j需要删的最少边数,考虑DP转移不难想到
SRM 551 Div1 1000
一道比较不错的计数题.
首先一个套路 meet in the middle 做出 选出k个sweet 点的和不超过MAX的方案数
这样我们只要求 有k个点有贡献的带标号生成树个数就可以了,这个我一开始本来想用组合数+ Cayley定理算的,后来看了AcrossTheSky的代码发现,我们直接用矩阵树定理算出 有贡献点 <= k个的方案数再容斥就可以了.
O(2n/2(n/2)+n4)O(2 ^{n / 2} * (n / 2) + n ^ 4)

SRM 552 Div1 250 按题意模拟
Div1 500 两个相同元素可以考虑其分界线,像这样的题目枚举分界线合并是不错的思路 ,这道题枚举横的和竖的分界线,原来我的一个方法要写RMQ,太麻烦了。
Div1 900
我终于也自己做出一道DIv1 Hard了! 虽然我的做法十分复杂。
先讲一讲标算f[i][j] 表示 用i-m(m为最大质数个数)这些质数来表示数,能表示1-j 中的哪些数。
首先有一个结论就是当pr[i]*pr[i]>j时能表示的数只可能是大于它的质数和1.这时一个二分计算答案。
否则我们枚举这一位有何贡献,递归计算。复杂度玄学。

这个想法是怎么相出的呢?首先,我们发现最裸的搜索,在每一步都要进行一次对于每一个质数相同的转移,所以我们就想,能否利用依次扩展质数来做。 这个时候发现这个转移还需要记录前缀和,然后就顺理成章的这么做了。遇到数论题就可以想各种不满的算法以及快速信息的合并。

我的做法:
首先我们发现那些大于n ^ (1 / 3) 的质数最多在最后的数中出现一次,所以我们先把这些数拿走。对于剩下的质数,我们meet in the middle , 求出这些数能够扩展的所有数,并统计答案。 然后我们合并左右两部分得到答案,对于只出现一个剩下的质数的数,一遍指针扫计算贡献。考虑到剩下的质数两两相乘也可能产生贡献,这个时候直接meet in the middle 复杂度相当大,所以我们可以分一次块,对于前200个左边的数,暴力计算右边数的答案,剩下meet in the middle 合并,这样子复杂度就正确了,复杂度: O (n ^ (2/3) + pi(2 /3) * 200 + 很少的剩下合并复杂度)
卡一卡空间就可以通过此题。

SRM 553
250:注意爆longlong,模拟
500: 一道细节非常多的DP题,观察发现黑白数量每一行相对上一行具有单调性,这样我们可以设计一个DP表示左边是不是黑色,黑色是不是数量不减,来进行DP,但这样会导致一整条相同的以及上全黑或全白,而且占满一整行的情况重复,我们在DP时,单独转移这一类状态,在最后进行去重,就可以了。
以后这种题考虑好细节,不要贸然去打。
1000: 查分约束系统的题,容易发现答案一定是一段连续的区间
第一种方法是二分其上下界,这样子要松弛n^2次,来抵消掉一开始的一些不在环上的边的贡献,来算出x在其中的系数,来看该答案是对l限制,还是对r限制。
还有一种做法:存在负环等价于存在长度小于等于n的负环,跑一边Floyed 判断每个系数的环即可。
这类题目一看就是差分约束,下次碰到这类题也算套路了。

SRM 554
500 结论题,
结论一:最大的一定在两边,否则直接把他拿出来放到最后一定不劣。
结论二:该数列是先下降在上升,归纳证明
有了这两个结论可以贪心了。
但是其实直接sort判断是否可行字典序是直接可以的。。。
遇到这种贪心题,考虑极值的性质,容易找到突破口。
1000 大码农,想清楚再写!!!

SRM 555
500 组合数水题。
1000 我想到了前半部分,没有想到那个剪枝,其实看到数据范围36也可以想到,这一类的容斥一看就不满,可以先想一些剪枝,然后尝试证明复杂度。

SRM 556
500 题意, 你从头到尾 把一列一位数 加入到桌面上,第一个数放在中间,以后的每一个数放在序列的最左边或者最右边。 问你你摆出的最后的数如果能够大于等于某数,大于等于该数的最小值是多少。
我们注意到 我们从后往前做就是要么放在最开头,要么放在最结尾,如此我们只要倒着DP设计状态就可以了,细节比较多,要想想。
其实逐位确定也是可以的,我们考虑已经确定了前i位,我们看这一位在第一个放的之前还是之后讨论一下就可以做了。 感觉 这个题主要还是提供了一个 正难则反的思路。

1000: 给你一幅无向图,每条边的边权是2或无限大,问你能否找出一种流量流法,使得s1 到 t1 恰好流了 K12 点流量 s2到t2恰好流了 K22 点流量?
留坑 不会证。

SRM 557
500: 最长反链 = 最少链覆盖 , 可以使用数学归纳法进行证明。
1000:给你K个数 让你求出这K个数 所能组成的线性基的和的最大值是多少,一道证明结论的好题,
先说做法:我们先把这个线性基的主元列消成至多有一个1,这样的话我们就可以直接算出这个线性基所能表示的最大值,然后我们用这个最大值替代,最大的主元项,将剩下的主元项都xor上最大元即是最优解。
首先证明:每一列主元列,最多只有一个全为1。
如果有多个主元列他们都是1,那么他们在每一个数中的变化状态一定相同,所以我们最多只有一个主元列全为1.
而我们构造出的方案就是最高主元位全为1,而剩下的主元位只有1个0的情况,假设最高主元位不是全为1是最优的,那我们假设有一个新方案,使得主元列有k个0,那么剩下的比原来的线性基要多2^high * k 以上,首先剩下的非主元位至多只有一位全为0,那么我们在这一位上增加了贡献,然后就是非主元位,最高位主元所管辖的非主元位就算全为1,再加上那一位主元位的贡献,以及他的非主元位的贡献,显然一定不会更优,所以第一位主元位一定是1.
接下来我们考虑,能不能使一个主元位,主元1的个数变少,使得答案变得更优,显然也不行,所以这样是最优的。

线性基题要大胆猜想,利用其性质小心验证。

SRM 558
500: 利用 前缀和组合数 以及简单的计算机何优化计数问题
1000:XJOI 原题, 黑白染色之后最小割。

SRM 559:
500: 注意到一个这样的二叉树度数为2的点最多2个,就可以优化到O(n)了。
1000:计算几何题,一个简单的转化,就可以把这个问题转化成不穿过第一个圆,在第一个圆上走一段再过去或者直接过去,第一种直接算,第二种二分答案之后扩大圆的半径即可,统计线段并的Trick:从某一处断开计算。

SRM 560:
500:一道模拟题要看出答案的上界不是很大,暴力判即可,注意在搞回去的时候发现多余点最后不一定会多余。
1000:
一道非常好的贪心题,首先子集枚举确定哪一些取到上界,哪一些取到下界,然后剩下的就可以任意调整。
比较妙的是假设我们已经得到了一个满足条件的最优解然后确定贪心策略,首先我们可以任意调整的里面如果有两个没有互相连边,那么我们考虑最后答案,我们一定可以把一个调整到边界得到不劣解,所以这种情况可以不考虑。
那么剩下的所有点就一定是一幅完全图,这个是时候,我们还是考虑最终结果,两个元i和j,因为我们已经确定了其它点的权值,我们尝试确定这两个点的取值,不难发现我们要最大化的答案是xi*xj + bixi + bjxj,这个式子合并一下得到当xi - xj = bi - bj 时最优,我们发现,其他的变元对他们的贡献是确定的,那么我们只需要保证最终xi-xj=bi-bj,bi,bj不考虑变元即可,这样构造出一组解,就是最优,朱司机说的导数相同也很有道理,不过也是基于调整。
最后tip:子集枚举一般枚举不到0!!!!
SRM 561
500: 清华集训那个题的弱化版。 考虑首先不相交只有内含那么就是一个树的结构,然后相当好多棵有根树,每次删除一个点到这个点所在树的根的链,谁不能操作谁输,求先手是否必胜。 然后就可以直接按SG函数的流程做了。 到树上可以直接启发式合并做。
1000:考虑每个点会被经过多少次。

SRM570
500 考虑到只和当前黑点间的边数和点数有关。然后直接利用一个DP做维护, 这一部分发现两者之间是线性关系,所以可以直接维护最终的那个值,优化到 O(n^2)
1000 一道费用流建模题, 首先容易想到黑白染色。 然后我们发现判断是否可行比较简单,但是建图有一点小trick,我们发现连一条有代价的边当且仅当它连了两条同一纵坐标或者同一横坐标的边的时候才会有贡献,所以我们就对每个点建一个横坐标的边,一个纵坐标的边,如果这是一个关键点那么我们先连一条(1,0) 再连一条 (1, 1) 否则 再连一条 (1, 0)即可。以后这一类题目也可以用类似的方法求解。

SRM 572
500: meet in the middle 分 前一半位,后一半位分别搞。
1000: 题意 这个题细节很多。 题意是有两个只由小写字母组成的字符串s、t,每次你把同一种相同的字母花A的代价一起变成前一个字母,或者花B的代价变成后一个字母。 z 的后一个 -> a, a的后一个是 z。
求是否有方案,如果有方案输出最小代价,否则输出-1.

n 50

首先s 和 t 相等答案一定为0.
否则
如果说t中有26个所有不同字符的话,我们发现我们任意调整一下一定会带到一个字符,所以这种情况无解。
然后我们就需要考虑每一种字符顺时针还是逆时针转圈,转多少圈多少长度。
首先我们把一个点逆时针转圈 x 步,看做-x,顺时针为+x。
然后我们考虑外圈一个大圆,内圈一个圆,大圆每一个点和内圈的对应点连边,我们考虑我们如何匹配。 考虑最多向左位移52,向右位移26,暴力枚举断点然后整体位移之后判断代价即可。。

SRM 573
450 一道神仙题。给一个图每个点有点权,我们要求一个团,要求其的大小 * 3 >= 总点数*2,求这样的团的权值最大值。
首先我们考虑到我们直接搜索就是 (2 ^ (n / 3) * n ^2) 的。 我们搜索每一条图中不存在的边,如果说这两个点都在现在可以选择,那么我们必须选择一个把它ban掉,我们考虑在dfs中这样的操作超过 n/3 的时候就必须要退出。 所以我们最多枚举的状态是 (2 ^ (n / 3)) 的,以后遇见这种保证 个数大于等于一定的数量的时候 我们可以考虑补集转化。
850 把 x,y 旋转45度,这是一道套路题。

发布了159 篇原创文章 · 获赞 93 · 访问量 5万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览