首页 > 代码库 > TopCoder SRM 刷水

TopCoder SRM 刷水

怎么样快速提高姿势水平呢?自信说应该做TopCoder!

于是我就看到了很多XJOI题,BZOJ题……好像可以搬些题呢!

 

简单整理一下,方便未来搬题(雾

 

 

 

462C:先考虑从某个点出发,其出边有不能走的边,到终点距离在最坏情况下的最小值。再考虑从某个点出发,还不知道不能走的边在哪时,到终点距离在最坏情况下的最小值。前者枚举每条出边跑最短路,后者反着跑最短路,然后和前者的答案取较大值。

463C:BZOJ2454,一个点最多只有三种转移,某些情况下只有两种,如果以这些点为根来看,整个转移的结构就是一个无向的二叉树。如果 两个状态 到 从起点到终点的路径 距离相同 且 到起点的距离相同 且 到根的距离相同,那么这两个状态对答案的影响是没有本质差别的,可以合并

464C:用\(f_{S,i,x,y}\)表示在\((x,y)\),已知\(S\)集合中的颜色是安全的,\(i\)这个颜色危险的,不经过危险的地方到达终点的概率。用\(g_{S,x,y}\)表示在\((x,y)\),已知\(S\)集合中的颜色是安全,最多经过一次危险的地方到达终点的概率。前者用类似最长路的方法从终点开始扩展着跑,后者结合前者的结果来跑

465C:注意到如果某个点离终点的距离是小于等于\(d\)的,那么它到达终点的概率就一直是\(frac{1}{d}\)的。也就是说如果走了\(n\)步后,每步获胜的概率是一定的,那么只要求出前\(n\)步每个人获胜的概率就行。这玩意直接对两个人分别上dp

466C:考虑哪些黑色格子被剩下了,然后跑容斥,考虑哪些黑格子被选了,直接求答案

469C:注意到对于任意一种方案两个人不可能都弃疗,那么只要用总方案分别减去两个人不合法的情况。什么时候会不合法呢,令\(x\)为J先审的电影,\(y\)为B先审的电影,\(sum = \sum_{i=0}^{totx}{timeJ_{x_i},  minlow = \min_{j=0}^{toty-1} ( \sum_{i=0}^{j}({timeJ_{y_i}-timeB_{y_i}}) - timeB_{y_{j+1}} ) } \) 那么只有 \(sum + minlow < 0 \)时才会不合法,那么只要看每本电影是给第一个人呢,还是给第二个人,更新一下\(sum\)和\(minlow\)就行了

471C:听说TC会出模拟退火?

472C:一道大分类讨论题……

473C:令\(f_{c,x,y}\)表示\(c\)种颜色的车占领了\(x\)行\(y\)列的方案,\(g_{n,x,y}\)表示\(n\)辆同样颜色的车占领了\(x\)行\(y\)列的方案,后者用容斥搞,前者用后者搞

475C:注意到如果某个集合可以被选中,那么其中的兔子都可以视为选到了最大值,其余的兔子都可以视为取到了最小值,这样就不用考虑每只兔子有多种的得分的可能性了。为了避免重复计数,枚举集合中的最小值,大力DP即可

476C:对于树边,向根的方向的船的个数要大于等于\(crewSize\)。对于环边,向左走到环顶的最小值加上向右走到环顶的最小值之和要大于等于\(crewSize\),记录当前向左走的最小值就可以dp了

477C:对于一棵子树来说,最多只有一条边从其中连出去,因为子树的父边一定得走。那么直接纪录有没有边就可以树D了 

478C:分别考虑每箱苹果的贡献。对于一种选取箱子的方案,影响它对答案的贡献有:这箱苹果有没有选,剩下选了的苹果的总个数。于是只要求出不取某箱苹果,但总苹果数为\(x\)的方案数。因为苹果箱子的顺序与总的结果是无关的,所以可以把这箱苹果看成是最后转移的,这样只要跑一个转移的逆过程就行——就是一个差分

479C:每个人最多只能被卡住一次……

480C:靠虑反向的过程,第一次操作后序列会变成若干段连续的数字。注意到一段连续的数字最多被切开一次,记录一下上个数字是啥就可以dp啦,注意不能有前导零啥的

481C:二分答案,这样的话只要在每次转移之前判断一下能不能在结束前做完,就可以扔掉打印机移动的时间。直接跑状压dp,用\(f_{i,j}\)表示当前在\(i\),而启动的打印机集合为\(j\),合法的最短时间

482C:没有标记的砝码之间的和差 都是可以介出上下界的,直接在未标记的砝码的周围寻找有没有解

483C:这题非常exciting/二分答案是有反例的。更大的船可能不会更优……但是注意到两艘船的载重量之差如果大于等于了最重的,那么较大的船一定较优。于是可以二分出一个大致的解,然后暴力向上扫一扫即可。

484C:怎么样区分出两个数?只要有一张卡上一个数出现了一个数没出现即可。于是考虑这样一种贪心:把一个数放进0张卡中,把若干个数分别放进1张卡中,把若干分别放进2张卡中……这样做可以保证卡上的数字总量最少,并且每张卡上的数字个数是差不多的。二分答案即可

487C:讲道理这场的C比B要简单(捂脸)。这题真的是突破天际啊……

技术分享
1 int getNumber(int m, int n)2 {3     f[0] = f[1] = 1;4     for (int i = 1; i <= n; ++ i) f[i] = (0ll + f[i - 1] + f[i - 1] - (i == m) - (i - m - 1 < 0? 0: f[i - m - 1]) + MOD) % MOD;5     return (f[n] - f[n - 1] + MOD) % MOD;6 }
View Code

488C:列出不等时候大力讨论

489C:BZOJ????,考虑从小向大插入每一棵树,那么被覆盖的面积是可以被确定的,于是就是一个插头dp状物。

490C:你看横行这么窄,直接上倍增!用\(i,j,k\)表示从第\(1\)个矩形的第\(1\)行第\(i\)列,走到第\(k\)个矩形的第\(r\)行第\(j\)列的最短距离

491C:二分答案,匹配建图,大力跑费用流

492C:把图建的好看科学点,跑dij

493C:大力dp咯,状态是有四种的(捂脸

494C:高斯消元求自由元数量

495C:一种方案可以停靠的位置是分层的,是一种大循环节内有小循环节的结构,然后有两种层(画图可知)。于是只要记搜就行了

496C:考虑把这个哈密顿路径补成哈密顿回路,可以证明将0,1放在一起的哈密顿回路和最优的哈密顿回路是一样长的,那么只要贪心就行了

497C:BSGS。可以求出 \(0k\) ~ \(mk\) (\(m\)是一个任取的数)每一项的值,那么在 \(ik\) ~ \((i + m)k\)中符合条件的那些数肯定对应了其中的几段权值区间,二分出边界即可

498C:如果不考虑坏点的话,行列可以分开dp。考虑坏点的话,就是加一个dp+容斥,把不合法的情况给roll掉

499C:A,B,C,D个数相同的串都可以互相达到,因此根据字符的个数来建边,然后上tarjan+DP

500C:枚举9 6 8 4的个数,就可以得到所有情况,用组合数得到答案

501C:大力dp咯

502C:BZOJ4314 ,先把集合考虑成排列,最后除以\(n!\)可以得到答案。对于没有限制的情况,前\(n-1\)个数可以随便选,最后一个数补成整除。用\(f_{n,m,k}\)表示\(n\)个数,有\(m\)个数和最后一个数是相同的,和被\(k\)整除的方案数。用类似补集转化的方式转移,式子太长太鬼畜写不下(捂脸

503C:大力dp咯,仔细实现即可

504C:以C分段,按区间考虑

553C:二分环长,建差分约束,如果有负环就是不合法的。如何知道当前环长是否太长?只要看负环中环的系数就行了,看它是正的还是负的。

554C:裸的矩阵快速幂

555C:对于某个起始位置,考虑那些修改结果与最终结果没有矛盾的时刻,越晚的时刻合法的位置显然较多,且包含较早的时刻。于是可以得到指针如果从某个位置开始,那么哪些位置必须要被事先涂上颜色。统计有重复?直接上容斥~

558C:BZOJ3774(膜拜一下建图即可AC

559C:考虑圆上的某点到另一个圆的最短路径。它要么是该点向圆心方向引出的一条线段,要么是一个沿圆周走一段再沿着公切线走。于是可以二分答案,然后判断圆上的哪个区域是合法的。

560C:如果和式中如果有\(ab\)这么一项,那么通过调整法可以证明\(a\)、\(b\)至少要有一个数达到了上下界。于是可以枚举每个数有没有达到边界,这样的话和式中的每一项都至少被确定了一个,这就成一次函数的极值问题了

561C:这玩意是棵树,然后就没有然后了 

562C:分\(k*2 \leq n\)与 \(k*2 > n\) 两种情况讨论一下

563C:用类似图哈希的方法知道每个位置的hash值,判断哪些位置是等价的

564C:如果没有限制的话,可以先随便选前\(n-1\)个数,最后一个数配平。于是从高向低位枚举每位的时候只要一个数没有达到上界,那么其他数就可以随意选了。

565C:ABC三个点构成的虚树要么是一条链,要么是星形的,分类讨论一下即可

567C:情况数少,记搜可过 

568C:有两种暴力1.枚举剩下的元素,某些匹配不能放在一边,这是个黑白染色问题,bfs判断是否合法 2. 枚举当前已知的每对匹配是向哪个方向连,然后就可以得到一些限制,某个区间向上连的线的条数的奇偶性,用bfs判断是否矛盾。合起来就行了

569C:肉眼观察法,对了有个式子很有趣\(\lfloor \frac{ans}{k} \rfloor \mod p = (ans \mod p - ans \mod k) * k^{-1} \mod p \)

570C:基佬题(雾,膜拜一下建图即可AC

571C:每个盘子上能到达的区域是个区间,直接SPFA

572C:若有解,则可以将两个字母环分别展开成链,并且对应关系不相交。暴力枚举展开方法后贪心即可,注意合法性

578C:首先暴力枚举一条将两棵子树分开的一条边,令\(f_{i,j,k,l}\)表示 以\(i\)为父亲的\(j\)这棵子树 与 以\(k\)为父亲的\(l\)这棵子树 匹配的答案,转移的时候直接跑 KM,时间复杂度\(O(n^5)\)

583C:令\(P_i\)为\(i\)次操作后仍未结束的概率,那么就有答案\(ans=\sum_{i=0}^{\infty}P_i\)。考虑容斥,令\(Q_S\)为\(S\)这个行列集合没有被选中的概率,则有\(P_i=\sum_{S}{(-1)^{|S|}Q_S^i}\),带入可以得到\(ans=\sum_{S}\frac{(-1)^{|S|}}{1-Q_S}\),然后就可以大力状压dp了

 

 

 

<style></style><style></style><style></style>

TopCoder SRM 刷水