Topcoder SRM 刷题企划

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Topcoder SRM 刷题企划相关的知识,希望对你有一定的参考价值。

 

1.本文用来记录自己在Topcoder上刷过的题目。不过重点是记录心得,记录自己的思路问题。

2.刷的题目全部都是Div2 1000分的题目,小概率会去做Div1 的进阶题。

3.基本上自己写出来的题目都不会另开一篇来写。

4.Topcoder使用: 【教程1教程2

 

SRM 508 Div2 YetAnotherORProblem (Div2 Hard)

  题意:构造长度为N,各元素上限为R的序列,并且满足$A_1+A_2+\cdots+A_n=A_1|A_2|\cdots|A_n$,求方案数(mod 1e9+7)。(N≤10,R≤15000)

  思路:显然与二进制相关。转移的时候将长度作为层,应从子集向原集合更新。由于要枚举集合的子集,所以复杂度近似看成$O(3^n)$。总复杂度$O(n 3^n)$。

 

SRM 509 Div2 NumberLabyrinth (Div2 Hard)

  题意:给定一张地图和起终点的坐标。对于格子C,如果为‘.‘,则可以填入0-9(只能填k次);如果为数字num,则可以向任意方向移动num格。求从终点到起点移动的最少次数,无解输出-1。(n,m,k≤50)

  思路:暴力bfs即可。还要记录已经修改过的次数,所以能判掉的状态会比较少,但时间上不成问题。

 

SRM 510 Div2 TheLuckyBases (Div2 Hard)

  题意:给定N,找出所有符合题意的B进制,满足$S[0]*B^0+S[1]*B^1+\cdots+S[k]*B^k=N$,S[i]只为4或7。求方案个数,有无限个输出-1。(N≤$10^{12}$)

  思路:首先判掉4和7。因为N-S[0]一定是B的约数,范围在$10^{12}$,所以可以在$O(\sqrt{n})$范围内刷出素因子,约数的数目也不会超过2000。暴力处理这些约数即可(注意可能会处理了B=1的情况,导致陷入死循环)

    官方题解对不同的范围运用不同的暴力做法。当B进制下只有2位时,直接计算出B($B=\frac{N-S[0]}{S[1]}$);当≥3位时,显然有$B\le \sqrt{N}$,于是可以暴力处理。复杂度仍然是$O(\sqrt{N})$,但是代码会更加简洁。

 

SRM 511 Div2 FiveHundredEleven (Div2 Hard, Div1 Mid)

  题意:Fox Ciel和Toastman在玩一个游戏。现在有N张卡片,写有0~511之间的一个数字。游戏开始时累计值为0。游戏过程中两人交替操作,Fox为先手。每次玩家从之前未被选中的卡片中任意选择一个,对目前的累计值进行位或运算。如果某个玩家不能选择任何数字,或者某位玩家在选择数字之后累计值变为511,那么这位玩家就输了。现在两人都选择最优策略,判断谁会获胜。(N≤50)

  思路:【题解】

 

SRM 512 Div2 DoubleRoshambo

  题意:分别给出两位玩家的N组手势。规则为双手剪刀石头布(左手对左手,右手对右手)。对于某玩家,有以下得分情况:1.左右手均胜利(计2分);2.右手胜利左手平局(计1分)。求玩家一的最大得分。

  思路:显然每个手势对应的2分和1分情况是唯一确定的。那么是否存在拆掉2分反而得分更大的情况?假如交换2分和0分的一组匹配,显然不会配出3分的情况,最多只会配出两个平局,而此时先配2分在分数上是等价的。证明:有匹配{k1-k2,k3-k4},且{k1-k2}=0,{k3-k4}=0,现在交换k2,k4。如果{k1-k4}=2,此时k3=k4,则{k3-k2}={k3-k4}=0;如果{k3-k2}=2,说明k1=k3,则{k1-k4}={k3-k4}=0。即始终无法配出超过2分的情况。同理其他情况也可yy。

    本题在官方题解上还有暴力的匈牙利算法处理最小完美匹配的做法。

 

以上是关于Topcoder SRM 刷题企划的主要内容,如果未能解决你的问题,请参考以下文章

Topcoder SRM 145

topcoder srm list

Topcoder SRM 147

Topcoder SRM 146

TopCoder SRM 刷水

Topcoder SRM 144