2013长春网络赛K题sword (hdu 4769)

本来只想出个中等难度题, 在题意上绕一下, 没想到到了网络赛的时候竟然没有队伍ac, 

而且全场也只有2个队伍北大,华南师范尝试过提交,

就连4小时就已经10题的清华都没在最后1小时有提交(估计他们10题之后就出去玩耍了吧),

师弟直接给我个称号防ak题制造者


------------------------------------------------------------------------------------------

题意及题意描述改了7、8遍了。。。想出道题真心不容易。。。

------------------------吐槽分割线---------------------------------------------------

因为最多有6s的技能cd,10个角色,可以推断最坏情况下60秒就可以覆盖所有的角色的所有技能(下面给出简单证明),

也就是说前60秒的操作如果都不能打败所有boss,说明一定是无解的了。所以我们只需解出最多前60秒的情况,

二分时间+暴力验证,验证的时候直接搜索最优解(也可以求出二分出最小时间后在求最有解),可以用Dancing Links X (当然解法也很多)

 

(t, k)行,列时间冲突的约束,以及同一角色不再相邻时间出现的约束。

T*K时间的列,同一时间只能操作同一英雄,精确覆盖(部分覆盖), Link((t,k), (t,k))不允许冲突。

英雄控制相邻时间, (T*K)  Link((t, k), (t,k+1)).   

(m1+sigma(p1…pm2))列,怪物的列重复覆盖。  

t, k  能够打的boss  遍历所有完全覆盖的重复覆盖列数的解,求得最小值即可。

 

这里可以简单证明下,要某个角色所有技能,显然要找个一个时间集合,其中要包括能整除1,2,3,4,5,6的数,那么我们就是要在1~60找到10个这样的不相交集合

其中1 2 3 是6的因子,只需考虑4, 5, 6

将6,12,18……60 分到10个集合里,除了这些数之外,还有60*(6-1)/6/5个5的整数倍数,(嗯,实际上只需要8个,),这些数考虑差大于一这个条件,分放入10个集合中,在考虑60*(6-1)/6*(5-1)/5/4这10个4的倍数,如上操作,即可。


华南师范的思路基本正确, 只是在构造冲突上好像还差了点, 很可惜, 截止到10月2日, 

这题目除了我的标程,还没有第二份ac的代码。 如果有大神看到题解, 可以帮忙ac下,证明数据和标程是正确的, thx~

你可能感兴趣的:(ACM周边,HDOJ,ACM,数据结构)