这次做的比较郁闷,比赛的时候老是出这样那样的问题,卡题卡的要死。最终只做出三道,赛后静下心来我和队友一共又做出4道,要是比赛有这种状态我们的排名就好多了。
现在说说题目:
1001(hdu3361):ASCII。根据ASCII码,输出对应的字符串,有个trick就是不用换行。
1002(hdu3362):Fix。解法:状态压缩dp,设dp[i]表示状态i(状态i表示固定点的状态,在二进制下的位上,0表示没固定,1表示固定)下用的费用最小,目标状态就是2^n-1。然后就是从初始状态(就是固定的点对应的状态)dp过程,
状态方程:dp[i]=min(dp[i-j]+cost[j]);j表示i状态下最后加进来固定的所对应的状态,cost[j]表示加进来的费用。
于是很好写了。
1003(hdu3363):Ice-sugar Gourd。解法:贪心。表示比赛基本没看这题,大脑太混乱了。赛后确实想过贪心,但ms不会证明,下面贴一份superlong大牛的证明过程吧:我们首先拿到这么个结论然后再来证明(究竟怎么想到这个结论的,估计是靠大神们的经验了)。结论是:我们把字符串围成一个环(环长度为len),那么总存在一种切法,使得一刀把换切成2半并且2半的H 和 T的数目分别相等。证明:我们首先任意切一刀(假设是竖直的切下来)那么设左半圆的H个数为x个(我们只讨论H的个数),则右边的H个数为n-x(假设总共n个,n为偶数),我们假设x < n-x(当然可以切成这样)那么我们可以尝试着做这么一件事情:顺时针或者逆时针移动我们的切线,那么原来有x个H的一方最终能变成n-x(旋转180°)。我们还可以发现x的变化总是+1 或者 -1,从整数角度来看,x的变化是连续的,并且 x < n/2 < n-x 那么从x变到n-x中间通过若干+1 ,-1的变化总能得到n/2这么个值。从数学角度来说,连续函数,f(x)=a,f(y)=b,那么一定存在z使得f(z)=(a+b)/2(连续函数的介值性定理),所以我们总能找到一种切法,使得一刀切得len/2长度穿中有n/2个H,因为H的总个数为n个,所以T的个数为len-n 所以在len/2的串中有 len/2 - n/2 即 (len-n)/2个 T,所以命题得证。于是最多是切两刀,很好写了。
1004(hdu3364):Lanterns。解法:高斯消元。表示比赛一开始就做这题,并且赛后才发现我们原来可以成为第一个ac此题的队,但是却没有,原因是没在每个给定的目标状态时进行矩阵的初始化。。。赛后突然发现了这个bug,改后ac。讲讲具体解法:一行一个等式,表示一个灯的状态,在等式的左边,受m个开关控制那么在相应开关位置上赋值为1,其他为0,那么在右边表示灯的目标状态如果目标状态和初始状态不同,则需要改变,赋值为1。剩下的就是高斯消元解方程,求变元。ans=2^k,k表示变元数。于是完成。
1005(hdu3365):New Ground。解法:叉积+点积。队友写的,表示不会。ps:队友解这题的解题报告:http://hi.baidu.com/%D2%D5%C1%D6010/blog/item/30867ec99fdcf11b7f3e6fd0.html。
1006(hdu3366):不会。
1007(hdu3367):Pseudoforest。解法:并查集。队友写的。
1008(hdu3368):Reversi。解法:模拟。这题比赛的时候差点没做出,队友很快就写完了但是连续提交几次都wa了,我在1004悲剧过后,也写了一下这题,也wa。后来正烦着的时候,头脑中突然闪过一个trick
b * * * b
w* w
* * * 像这种情况明显就没考虑,后来队友改后ac。
后面三道都不会了,悲剧。。。
这次要是能把上述题目在比赛中写出来那就舒服了,哎~!,还是太菜了,比赛也没经验,多加训练!!!