5.19 ACM Practice总结

来源:互联网 发布:网站如何做谷歌优化 编辑:程序博客网 时间:2024/06/04 23:34

先写总结再写题解吧。。毕竟做的不是太好。

早上

一开始看题完全没有思路。因为看的是英文题,所以阅读速度有点慢。当我还在想算法的时候别人已经开始敲键盘了。。。因为是ACM模式,所以我以为有水题我没有想到。所以那个时候还是比较紧张的。我就一直在纠结着自己的想法。然后看见别人一下子就A了一题。。我马上就切换了题目。但是因为觉得别人都这么快的A了这道题,所以没有往代码量比较高的方向上去想。但是较简单的算法我又没有想到。而且一直急于要AC,所以算法中的很多细节都没有考虑。导致我一道题交了20次都没有A。。因为看其他题都没有什么思路。所以就一直在两道题之间切换。但是思路一直都没有打开。最后爆零。。

因为对ACM不是很熟悉。所以整场比赛的节奏都不是很对。
1. 首先思维上一直局限于代码量较小方向,觉得一道题不应该花太多时间。
2. 然后当别人很快的就A了一题的时候会比较紧张。觉得自己是不是什么地方看错了。比较简单的题没有想出来。
3. 当一道题一直WA,WA,WA,WA,WA的时候心里就很急躁。没有及时的冷静下来检查程序, 考虑细节。
4. 一做ACM就把OI的经验全部忘记了。。

下午

下午的心态就放平衡了很多啦。反正早上都爆零了。一开始先看题。发现有两道题很水。用了半个钟左右切掉。然后去看了一下Status,发现有道题很多人在做。然后去看了一下,觉得还是道水题。但是程序中很多细节没有考虑。。(太久没玩过国际象棋。。。)WA了3,4次才A。然后剩下来的2个钟一直看后三题。有道题我看根本都没有人A过,我就直接连题目都没有看了。但是剩下来的两题也很难。我一直纠结到5点,才开始想起可以打表找规律。。然后,居然真的有。。。但是没时间了。。。
最后A了3题,,但是几乎每个人都A了3题。。

下午的节奏总体来讲还是往正确方向发展的。但是。。。
1. 还是连题目都没有看完。其实那道没人过的题目是道大水题。。把题看完就会做了。。
2. 在纠结题目的时候还是没有打表找规律这种意识。。

第一次正式的做ACM模式。。(其实没有罚时的应该叫IOI模式啦。。)之前都是组团开黑的。。压力没有这么大。

虽然说我不去PKUSC,但是多做ACM还是能很好的锻炼心态调整以及代码实现的稳定的。

可惜CF的时间太不和谐。。。我这个绿名狗不知道什么时候才能变回来。。




题解

1 连环锁(POJ1832)

这题最好的做法是用一个叫格雷码的东西。
具体的表是

十进制 二进制 格雷码 4 0100 0110 5 0101 0111 6 0110 0101 7 0111 0100 8 1000 1100 9 1001 1101

可以发现,对于两个连续的数。他们对应的格雷码只相差一位。并且格雷码与二进制是一一对应的。那么这题我们可以直接将读入的格雷码解码回二进制,然后做差取绝对值就可以了。

: 从最右一位往左。每一位异或上左边一位。
: 从左边第二位往右。每一位异或上左边一位解码后的结果


2 TEAM THEM UP!(poj 1112)

这题采用一种逆向思维。
假如对于两个人i,j,若ijjiGi,j
接着我们对GNo Solution
否则我们发现GQi,WhiteBlack
那么我们可以进行一个0/1背包,并且强制每个Qi恰好只取一个集合。
把一个合法解作为我们原题中的X,那么剩下的作为Y就好了。


3 Computer Basketball Game(poj 2238)

这题比较难。
首先我们可以发现我们可以直接暴力分配Player1的点数。然后再计算他获胜的概率。
那么问题变为了
Player1Player2Player1Player1

我们可以这样来做。
Fi,j,kPlayer1i,Player2j
kF0,0,0

考虑具体的转移
Pi,jPlayerijTi,jPlayeriPlayerj

那么转移就是
Fi,j,1=Fi+2,j,1P1,2+Fi+3,j,1P1,3+Fi,j,1T1,1+Fi,j,2T2,1

Fi,j,2=Fi,j+2,2P2,2+Fi,j+3,2P2,3+Fi,j,1T1,2+Fi,j,2T2,2

注意到这是一个带环的转移。但是我们可以直接高斯消元将Fi,j,1Fi,j,2解出来。


4 Boatherds(poj 2114)

这题就是比较显然的点剖吧。要讲?


5 ATP(poj 1818)

我们先二分答案l
i,iK


6 One-move checkmate(poj 1647)

直接枚举皇后到的位置。然后注意一些细节就好了。


7 Vivian’s Problem(poj 1777)

N=i=0kpeii

F(N)=i=1,i|NNi

ei1ei10
x,F(N)=2x

做这道题,我们首先要知道F(N)
然后,对于F(pi),i>1,p>1,2x
有了这两个结论之后这题就比较好做了。
我们的ei只可能等于1,并且F(pi)2x
也就是说
pi=Mi,Mi
N=Mj
又因为23118
我们接下来就可以直接递归求解答案了。


8 Math teacher’s homework(poj 3986)

题意:
求有多少种方案,满足
X1xorX2xorX3xorXn=k
0XiMi
其中n50,Mi2311

因为比较蠢。所以用了一种比较蠢的做法>_<

我们定义一个函数
Count(M,K)
MK

Ki表示K二进制的第i位

我们取出M中最大的MiP
MPQ
设其最高为为top
再设Qtopx
1. x=Ktop,
那么很显然的是,Ptop=0也就是说P在top后面的位没有任何限制。
也就是说,在top后面的位,Q可以随意选择,不需要考虑K,因为我们P上的数字可以根据情况进行修改使得每一位异或出来仍然=Ki
那么我们可以直接Dp计算出Q中top这一位异或出来等于K的方案。
2. xKtop,

Ptop=1
P 在 top后面的位有限制。
我们此时可以将P修改为P2top,然后递归计算Count(Q+P,K xor 2top)

我们发现我们每次会将一个数的1给抹掉。那么总的时间复杂度就是O(N231)

0 0
原创粉丝点击