noip2016提高&普及组简要题解

提高组

两天的难易程度都是1-3-2

Day1

toy

乱搞模拟

running

首先对于一个人(s,t),我们把这条路径拆分为(s,lca)与(lca,t),其中lca为s与t的最近公共祖先
先看(s,lca)这一类,对于一个节点x,一个x的子树中的节点y,只要满足 d[y]d[x]=w[x] 且x是lca(s,t)的子树中的点,那么ans[x]++.
d[y]d[x]=w[x]
d[y]=w[x]+d[x]
现在成了一个经典的问题: 在x的子树中存有多少个d[y]
但注意到如果路径(s,t)在x的子树中但不经过x,ans[x]是不能+1的,所以对于路径(s,lca),我们分别在s与lca打一个+d[y]与-d[y]的标记.然后dfs一遍统计答案.因为对于节点x我们只关心一个值,所以开始时记录一下值,返回时减掉就是x的子树中新增的值.
对于(t,lca)同理,需要注意的是特判lca也能观察到的情况.

classroom

首先我们不难发现,这个期望值是可以相加的.即上完第i节课所用的期望值加上从第i节课的课室到第i+1节课的课室的期望就等于上完第i+1节课的期望.因为他们是互不影响的.
然后这就变成了一道很简单的dp.

day2

problem

杨辉三角形+矩阵前缀和预处理,O(1)回答询问.

earthworm

首先暴力就是打一个堆,然后维护堆内的值全部与真实值差i*q
q=0的做法就是有每一次分解出来的x和y都会比下一次的x和y的大.所以维护一个链表两个指针处理插入就OK了.
然后正解就是合并一下,维护链表中的值全部与真实值差i*q.分解出来的x,y减掉i*q后依旧是单调不增的

angrybirds

状压DP.
首先n^3处理出 Gi,j 表示打i和j这一条抛物线的时候能顺带打下多少,压起来.
然后还能发现就是无论如何总要打掉第一个没被打掉的,那就在当前这一次打掉.
然后就是2^n*n^2的DP了.

普及组

T1,T2不说了 (虽然打完就交都只有70分)

T3

简单模拟一下,用一个指针维护一天内的人,再开一个桶维护人数.

T4

设d-c=x,那么b-a=2x
然后c-b>6x
然后枚举x,O(n)预处理一下c+d=x的组数,再枚举a,计算ansa,ansb.再枚举d,计算ansc,ansd.
这样就是O(n^2)的暴力,能有95分.
对于最后一个点,我们观察发现x最大能取到n/9.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值