09-02 NOIP模拟测试35

期望得分:80+100+0

实际得分:70+80+0

rk:18

 

A. 公园

T1连续爆炸篇

第一眼拓扑,发现要存状态,定义了个dp,脑子糊了不知道怎么处理多起点多终点,觉得十分不可做。然后发现可以记忆化,然而不会打。

于是盯了40分钟,想了各种乱七八糟的东西,卡T1慌得一批。为了缓和下,滚去T2。

打完T2回来还是没什么可A的复杂度,然后打了个O(mv^2)每个起点拓扑跑了。

正解:建虚点S,T

S向入口连边,权值为排队时间,出口类似。然后就只需要跑一遍拓扑。O(v^2)

定义dp[i][j]为到i点的链长为j的最短时间,拓扑更新即可。

以上其实是网络流建图的常用套路,然而考试大脑短路。

 

B. 计划

简化:给定序列ai,q个[k,l]的询问,回答[k,l]中所有满足区间中不同数的个数>=m的子区间[i,j]的j-i之和。

第一眼莫队,发现区间可以转移,[l,r]->[l,r+1]的答案增量为以r+1为右端点的所有满足>=m限制且左端点坐标>=l的等差数列之和。

性质:

  • 如果[l,r]中有>=m个不同的数,那么[l-1,r],[l,r+1]同样满足
  • [l,r]->[x,r+1],x一定>=l,换言之在右端点递增时左端点单调不降

定义pre[i]表示以i为右端点,最大的满足限制的左端点。

suf[i]表示以i为左端点,最小的满足限制的右端点。

那么[l,r]->[l,r+1],能形成贡献的左端点范围为[l,pre[r]],等差数列求和即可。

复杂度$\Theta(n+q \sqrt{n})$

然而乘法运算没ll,WA80,跟O(qn)暴力一个分。。。

 

正解:

拆式子,维护变量。

对于所有询问[l,r]按r排序,然后把r的合法答案放到pre[r]上,用树状数组维护,回答查询>=k处的和。

 

C. 抽卡

不会

posted @ 2019-09-03 11:25  hzoi_yzh  阅读(146)  评论(0编辑  收藏  举报