gym101620_by_santongding

  • A
    题意:
    题解:
    模拟
    代码:A

  • B
    题意:
    在平面第一象限中原有n个a点,同时按顺序出现m个b点,每出现一个b点以其位置为中心,向x,y轴垂直画射线,若射线碰到之前其他b点画的线则停止.问每个b点出现时其画的射线与坐标轴、其他b点画出的射线围成的闭区域中有多少个a点.
    b点所有x坐标互不相同,所有y坐标互不相同.
    题解:
    考虑离线做法,先求出所有b点都画完之后每个b点所属区域中有多少个a点,然后按出现顺序逆序删除b点及其所属线段,其所属的点就累加到其他b点所属的区域中.
    用类似扫描线算法实现,先对所有a,b点y坐标从大到小排序,以此将点加入,同时维护一个按x坐标升序排序的b点集合,其中所有点垂直的射线都没有被其他b点的水平射线挡住.
    对于每一个给定的y坐标,由于只有可能出现一个b点,先对b点操作再对a点操作.
    考虑:
    (1)如何将b点加入集合并维护集合正确性
    (2)找出如果将b点删除后,其中的答案应累加给谁.
    (3)找出a点在最终图中所属的b点
    对于(1),直接将当前b点加入集合,在集合中直接查找x坐标,然后将x坐标小于当前点且在原题目中出现时间晚于当前点的点删除,由于点只能被删除一次,这部分复杂度logn;
    对于(2),找到集合中当前b点在集合中的下一个点,即为所求.无需比较在原题目中出现时间的先后顺序(使用并查集合并正确性显然).
    对于(3),找到在b集合中x坐标大于等于这一a点的第一个点即可.
    统计答案时,按原题目中出现顺序从后往前操作,先记下在并查集中当前点的累加答案,再将这个点答案与之前(2)步骤中找出的点用并查集合并在一起.

代码:B

  • G
    题意:
    有一个n点m边的双向图(n,m<=3e5),初始时一个人在1点,他每次能花费1代价获得一次转移机会,这次机会可以让他等概率走到当前点的相邻点,同时他可以选择不移动(但依然花费代价),求到n点的最小期望值.
    题解:
    设f(x)为点x到n的最小期望,初始时只知道f(n)=0.
    考虑从小到大将所有f(x)求出来.
    现在假设已知前k小的f(x).
    对于第k+1小的点,他在花费1代价后,如果随机到前k小的点,则向前走,否则就停留原地.
    设cnt(x)为x的相邻点中已知f(x)的个数,d(x)为x的度数.
    那么对于第k+1个点,肯定满足
    f(x)=Σf(i)/d(x)(f(i)已知)+f(x)*(d(x)-cnt(x))/d(x)+1
    整理得显含f(x)的表达式.
    根据这个表达式求得的最小值的那个点即为第k+1个点.
    运用类似dijstra做法即可
    代码:G

  • L
    题意:
    2000x2000网格平面中有a,b两种正方形,a边与网格线水平,b边与网格线呈45°夹角,两种正方形中心都在格点上,且a的边长为偶数,b的对角线长为偶数,求所有正方形面积并.
    题解:
    考虑将a,b两种正方形分开处理.
    对于a,用二维前缀和计算每个格点是否被覆盖即可.
    对于b,作出一个与所有b边平行的新网格图,用处理a一样的方法进行处理,同时计算新图到原图中的映射.
    统计答案时遍历新图中每一个点,同时找出在原图中的对应区域是否被覆盖,运用简单容斥即可.
    注意细节及边界情况
    代码:L

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值