Topcoder口胡记 SRM 562 Div 1 ~ SRM 592 Div 1

Posted blog-of-eden

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Topcoder口胡记 SRM 562 Div 1 ~ SRM 592 Div 1相关的知识,希望对你有一定的参考价值。

传送门:https://284914869.github.io/AEoj/index.html

Topcoder SRM 562 Div 1 - Problem 1000 InducedSubgraphs

当K*2<=N的时候,显而易见的是编号为i(K<=i<=N-K+1)的点一定会形成一条链。

枚举合法的这样的链,剩下的暴力dp吧。

当K*2>N的时候,显而易见的是编号为i(N-K+1<=i<=K)的点一定会形成一个联通快。

如果把这个联通块去掉,树会形成若干个不相交、不接触的小联通块,且这些联通块的大小之和一定。

如果把树的一个点提根,进行上下dp,就能很方便地进行统计答案。

Topcoder SRM 563 Div 1 - Problem 950 CoinsGame

好惨惨啊!这么简单的题竟然没有自己想出来~~

我们称棋子A和棋子B等价,当且仅当它们只会同时在这个棋盘上,或同时离开棋盘。

一个显然的结论就是,若A和B等价,B和C等价,那么A和C等价(即具有传递性)

所以可以通过bfs求出所有等价点对,通过并查集合并。用总情况数减去不合法情况数就好了。

Topcoder SRM 564 Div 1 - Problem 850 DefectiveAddition

topcoder罕见的水题啊!

如果我们已知了每个数相与原数不同的最高的二进制位,(设ta为pi)

那么对于第k位,如果有x个数满足pi>k,由于这些位的异或值确定,

所以,当x>0时,有2^(x-1)种方案。

由于当x=0时会有意想不到的事情发生,所以稍微dp一下就好了。

Topcoder SRM 565 Div 1 - Problem 1000 UnknownTree

topcoder罕见的无思维难度码农题。。

分两种情况讨论:A、B、C在同一条链上。以及A、B、C不在同一条链上。

Topcoder SRM 566 Div 1 - Problem 1000 FencingPenguins

http://www.cnblogs.com/Blog-of-Eden/p/7852426.html

Topcoder SRM 567 Div 1 - Problem 1000 Mountains

一道很妙的题哇。

一个显而易见的结论是,一座山的可见范围,一定是一段连续的区间。

考虑编号从大到小的放置山。

如果当前山可见,并且可见范围不是从最左边到最右边。

那么又有一个很显然的结论,当前山只有两个合法位置。

考虑如果当前山不可见,那么这座山对之后要放的山没有丝毫影响。直接乘上这座山合法的位置数即可。

如果这座山到处都可见?这是个较严重的问题,

我们考虑,把所有这样的到处都可见的山全部拿出来。(按照编号从小到大)(我们称之为大山)

相邻两座大山之间夹着若干个小山。

对于大山L和大山R,(L<R),很显然1到L-1和R+1到n的山对这之间的山的放置没有影响。

所以可以枚举相邻两个大山的位置,对之间的小山位置进行dfs。

dfs的复杂度是2的幂次,可以接受。

Topcoder SRM 568 Div 1 - Problem 1000 DisjointSemicircles

异常兴奋!又一道喜闻乐见的分情况讨论题!

我们设有m对连线已经确定。(m<=n)

当m比较大的时候,暴力似乎行。O(2^(2n-2m-1)*C(2n-2m,n-m))

当m比较小的时候,枚举这些连线分别在上方还是在下方。

方案合法当且仅当这个半圆里面与它同向的点的数量是偶数。

设向上为1,向下为0,一个半圆相当于限制了这个半圆之中的变量的xor值为1或者是0.

对于前缀xor数组,相当于限制了两个位置上的数xor为1或者是0。

这个用并查集来检查一下是否合法即可。

Topcoder SRM 569 Div 1 - Problem 1000 MegaFactorial

我真是个爱学习的孩子,在秋游的时候还在想这道题~~

简单来说,由于B<=10,我们只关心的是B的最小质因子p以及它的指数q。

简单的说,我们只要统计N!K的值中,质因子p的指数Q,计算Q div q就好了。

由于对1e9+7取模,div比较麻烦,所以:Q div q = (Q - Q mod q) / q

再由于K比较小,所以矩乘一下就行了。

Topcoder SRM 570 Div 1 - Problem 900 CurvyonRails

谁来治一治我普及组级别的网络流水平啊o(╥﹏╥)o

复杂地来说,黑白染色,每个格子拆成两类点:横方向点和纵方向点,

由于两份流量都流入横方向点或都流入纵方向点都会产生1的费用,

所以将方向点拆点,连两条边,一条流量为1,费用为0;另一条流量为1,费用为1。

Topcoder SRM 571 Div 1 - Problem 1000 CandyOnDisk

Topcoder也会出这种无脑题?

若a能到达b,那么b也能到达a。

如果从一个圆到达另一个圆,其可到达范围是两个圆环。

每个圆环当作一个点,就可以建图跑spfa。

需要特判一些特殊情况(*/ω\*)

Topcoder SRM 572 Div 1 - Problem 1000 NextAndPrev

枚举分界点,贪心求最小代价就行了?

由于口胡我可能没想清细节。。

Topcoder SRM 573 Div 1 - Problem 850 WolfPack

以我的智商看来是做不动这种脑洞题啊。

每次x可以+1,-1,不变,y也可以+1,-1,不变,且x,y至少有一个变,这个很烦啊。

根据题解的做法,我们把坐标轴旋转45°,题目变成了:

每次x可以+1或-1,y也可以+1或-1,且x,y独立!这一步转化好妙啊!

接下来就好做了,对于一个终点Z,

对于Zx,可以求出x方向上的方案数;对于Zy,可以求出y方向上的方案数。

答案是sigma Zx,Zy [Fx(Zx)*Fy(Zy)] = sigmaZx[Fx(Zx)] * sigmaZy[Fy(Zy)]

TopCoder SRM 574 Div 1 - Problem 1050 Tunnels

对于给出矩形中的非从左边连到右边的地道,这些地道会形成括号序列,

对于从左边穿到右边的地道,可能是从左往右,也可能是从右往左?

从上往下进行dp?

似乎怎么想也想不清啊。。反正是口胡,放弃思考了。。

TopCoder SRM 575 Div 1 - Problem 1000 Tunnels

每次想网络流题都要想好久好久~~。。

先进行黑白染色,由于L字形角落的格子一定黑色,两端的格子一定白色,

两端的格子,一定有一个在奇数行,一个在偶数行。

源点流向奇数行,偶数行流向汇点就行了。

TopCoder SRM 576 Div 1 - Problem 900 CharacterBoard

Topcoder罕见的放松题啊。

我们考虑给你的矩阵中两个元素x和y,若它们在字符串中的位置相同才可能发生冲突。

位置相同当且仅当x和y的位置差能被Len整除,这样的len最多只有i0*j0*sqrt(i0*W)种

对于这样的每一种len,暴力判断是否合法以及计算方案数,

如果不存在这样的冲突,方案数为26^(Len - i0*j0)。所以等比数列求和即可。

TopCoder SRM 577 Div 1 - Problem 1000 BoardPainting

又是网络流。┭┮﹏┭┮

好难哇,怎么做啊。。

在此给出周欣的算法:

如果把相邻两个格子之间新建一个虚点,选择这个虚点,就表示这两个格子在一次染色中完成。

由于染色过程不能转弯,这限制了一个格子横放向上的虚点和纵方向上的虚点不能同时选。

这就是二分图最大独立集问题,可以用网络流解决

TopCoder SRM 578 Div 1 - Problem 1000 DeerInZooDivOne

看到题目描述中的鹿角,莫名想到乔巴~~

简单地说,可以枚举两个联通块之间的分界边,然后进行dp,

考虑f[a][b]表示以a为根节点,b为根节点,a联通块与b联通块同构的最大大小。

a的若干个儿子和b的若干个儿子一一匹配,其f值的和+1就是f[a][b]。

这就是二分图最大权匹配

TopCoder SRM 579 Div 1 - Problem 1000 RockPaperScissors

如果当前我们知道了对手之前扔出a个剪刀,b个石头,c个布,我们可以通过dp预处理求出下一次对手扔剪刀、扔石头、扔布的概率。

然后我们当前做出最优决策,使这一回合的期望得分尽可能的大。这也是一个dp。

TopCoder SRM 580 Div 1 - Problem 1000 WallGameDiv1

简单博弈,我们可以证明,Rabbit不会将棋子向上移, 

当Rabbit在某一行,且下方有障碍时,Eel不会放障碍,

以此我们得出一个结论,Rabbit在一行中的运动是,左,右,左,右,左,......最后下。

我们还可以得出一个结论,当Rabbit在某一行某一列上,且此时Eel没有在它下方放上障碍,那么Rabbit也一定会往下走了(往左右走之后还一定会回到这里)。

所以可以用区间dp。f[i][L][R][0 or 1]表示第i行,已经放了L到R的障碍(即Rabbit已经走过了L到R),此时Rabbit在L-1还是在R+1。

每次Eel决定Rabbit下方是否有障碍,如果有障碍,则Rabbit决定往左或往右。

据说cwy用奥妙重重的骗分方法A了此题?说不定那也是对的喔。。

 

累了。。

 

还有581到592。。下次回来再写吧

 

以上是关于Topcoder口胡记 SRM 562 Div 1 ~ SRM 592 Div 1的主要内容,如果未能解决你的问题,请参考以下文章

TOPCODER SRM 686 div2 1000

TopCoder[SRM513 div 1]:(500)

Topcoder SRM 刷题企划

TopCoder SRM 596 DIV 1 250

topcoder srm 335 div1

topcoder srm 310 div1