NOIP2017提高组模拟22-雅礼国庆10.5

30 篇文章 0 订阅
17 篇文章 0 订阅

T1
题意:有m(<=1e4)层边,每层有k(<=10)个点,第一层只有一个点S,最后一层只有一个点T。然后整个图是一个DAG,可以一次取反相邻两层的边,问有多少种方案使得最后的S到T的路径数为偶数,有模数。

题解:用f【i】【j】表示做到第i层,路径数的奇偶性情况为j,如果是偶数为0,奇数为1。最后把状态中1 的个数为偶数的累加即可。
代码:http://paste.ubuntu.com/25879093/

T2
题意:给定n+1(n为偶数)个01串,每个串长度为2n,有n个1。
找到任意两个串,使得交的1的个数大于等于 n2

题解:想想直接暴力做,是O( n364 )的。但分析一波发现其实很难构造出跑满的数据,因此直接上,中途找到一组直接输出即可。
正解是随机……
代码:http://paste.ubuntu.com/25879353/
T3
题意:给定一棵树,在某些节点放一些灭火器,每个灭火器最多灭S(<=1e9)个点,每个点最多被隔K个单位距离的灭火器灭,问最少要多少个灭火器。

题解:首先贪心将灭火器放在越高越好。
用 g【x】【i】以x为根 距离为i 的需要灭火器房间个数
f【x】【i】以x为根 距离为i 的灭火器个数
做完儿子后,f【x】【i】= fvi1 (1<=i<=K),g同理。
且g【x】【0】=1
i==K时,不能再往上传递了,必须全部灭掉。
所以若g【x】【K】大于0,则用足量的灭火器。
因为对于某个点,如果有若干个灭火器可以灭到该点,那么其实用子树内的灭火器更好。
然后我们发现每次往上传递灭火器,相对距离+2,所以i+j==K或K-1时,要把子树内能灭掉的先灭掉。
最后在把根节点能灭掉的都灭掉。

代码:http://paste.ubuntu.com/25879359/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值