Codechef 2017 March Challenge 简要题解

      在比赛进行到一半的时候才参加,,导致challenge没法搞得很好

      写一个简要题解吧,,challenge太差了就不放了

Xenny and Alternating Tasks:直接按照题意模拟即可。


Bear and Extra Number:首先处理重复;否则一定是极值。


Bandwidth of a matrix:二分答案,然后贪心多放1,判断是否能合法。


Cooking Schedule:二分答案,然后令dp[i][j]表示i天,第i天状态为j的最优方案(x,y),表示最少x天,在此基础上连续的最少是y。


Pishty and birthday:考虑先递推出2^16种矩形的sg值,然后用树状数组维护区间异或值。


Completing favorite game:首先可以发现闯关顺序一定是某一个dfs序;考虑子树dp,令dp[i]=(x,y),表示i子树中最少要x天,此时最后一天最少是y hours;这样还不足以转移,考虑加维令dp[i][j]表示第一天花了j hours,其余同上。然后因为son<=10,考虑直接子集dp。


       这样就水过了6道sb题。


Sum of distances:这题还是想了一会儿的(尤其是一开始没有注意到是有向)。一开始想出了一个分块做法,就推广到分治去了。。

      考虑solve(l,r)中跨越中点的点对,令x=(l+r)/2-1,y=x+1,z=y+1,那么跨越中点的点对一定至少经过x,y,z中的一个;那么把x,y,z到剩余点的距离都跑出来;考虑离x最近的点对需要满足的条件,发现就是一个二维偏序,用一维排序+二维数据结构维护即可。

      一开始以为Nlog^2N过不去,结果cc跑的超级快,,0.4s(时限4s)就过了。。


Bear and Cat Trap:很exciting的题目。

      首先可以发现一开始一定是堵边上的点。

      一开始想出来一个idea,就是考虑猫走的方向,那么我一定先把这个角堵上;然后如果猫一直往这个角走,那么我就将这个角两边的慢慢堵上;如果猫某一步偏转了方向,那么我就找到对应边中点然后慢慢把两边堵上。

      一开始觉得这个做法毫无问题,就码码码。

      码到一半被miaom大找出反例了o(╯□╰)o,于是想修补一下方法,结果根本玩不过猫啊qaq。

      想了挺久的,突然想到我可以在猫走完第一步后就把它之后的一步堵上,这样它就一定会在第二部偏转,然后就随便玩了。

      感觉智商突然被取了一个绝对值啊。。


Path Triples On Tree:个人认为是后三题中最simple,但却是过得最少的。

       考虑将两个问题分开考虑。

       三条边相交;可以发现三条边都相交的部分一定是一条链,那么因为链满足点-边=1,于是考虑用点的答案-边的答案就好了。

       三条边都不相交:这个直接dp,用dp[i][j][k]表示i子树内,已经连了j条边,i还需要连向k条链的方案数。

       然后就做完了。。。


      最后还是说一下challenge吧,,首先一个贪心跑出解;然后随机两行把这两行dp;这个就是我的做法了,,

      想了好几个idea都效果不佳啊。。

      朝鲜小哥似乎还有选出两列dp的方法,,妙不可言啊,


by lych

2017.3.13


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值