• 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. 抽卡

    不会

  • 相关阅读:
    穿戴式眼镜显示屏方案
    centos8 shell脚本定时restart workerman问题
    cmake中文文档(一)-编译命令行工具
    Dear ImGui中文文档(一)
    PHP实现布隆过滤算法
    case when的记录
    前端的一些记录
    z-index 弹出元素被原本页面的元素遮挡住
    DevExpress 导出pdf中文不显示或者乱码问题
    DevExpress控件位置的微调
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/11451964.html
Copyright © 2020-2023  润新知