【综合复健训练2021/1/18:题解】Comprehensive Training (CF 1000 ~ 1600)

前言

  • 由于是复健性质的,主要是重新找回手感,在 C F CF CF 拉了一些不是很难的题。
  • 这里简单题就不给题解了吧_(:3亅<)_
  • 题源:

在这里插入图片描述

A:贪心 1600

  • 选一些(大于0)个数,使得选出来的数的乘积最大。 问选那些数。

  • 如果有正数那肯定要选。
  • 如果有负数,那两个两个选,每次选绝对值最大的两个。
  • 如果这样了还没有选过数,那么选一个0.
  • 如果这样了还没有选过数,那么选一个最大的负数。

B:排序+贪心 1400

  • 给你 n n n 段区间,问你区间两两不重叠,最多选几段。
  • 如果选择 [ 5 , 10 ] [5,10] [5,10] ,是不能选择 [ 10 , 11 ] [10,11] [10,11] 的因为 10 10 10 算重叠。

  • 不用 D P DP DP,排序下就行。也是老模板题了。
  • 按照区间尾升序排序,然后贪心选取(能拿就拿)就可以了。

C:二分+贪心 1800

  • 给你 n n n 个点,都在一个轴上。
  • 你要放三个信号塔,如果信号强度是 t t t,一个信号塔的位置是 p p p , 那么它可以覆盖区间 [ p − t , p + t ] [p-t,p+t] [pt,p+t] 的所有点。
  • 问你覆盖所有点,信号强度最少是多少,并给出每个信号塔的位置。

  • 第一反应就是二分 t t t,然后贪心 c h e c k check check 是否三个塔能全覆盖。
  • 然后就被卡精度了。。。不是很懂 E P S = 1 e − 15 EPS=1e-15 EPS=1e15 还是 W a 20 Wa20 Wa20
  • 然后悄咪咪百度了一下,发现信号塔的位置一定是一个整数 x x x 或者是 x . 5 x.5 x.5 的形式
  • 然后就原来每个点的坐标扩大到原来的两倍,然后答案除以 2 2 2 就过了。
  • 为什么呢?很简单,最极限的情况就是信号塔的覆盖左区间和有区间都有点,他们的坐标除以 2 2 2 就是信号塔的坐标了。因此信号塔的坐标就是 x . 0 x.0 x.0 x . 5 x.5 x.5 的形式了。

D:博弈 1200

  • 给你一个 n × n n\times n n×n 的网格。每个格子为空。
  • 两个人玩,每个人选择一个四周都没有被涂过色的格子并把它涂色,然后轮流进行。
  • 网格四周也是可以选择的。
  • 问你先手必赢还是后手必赢, n ≤ 1 0 18 n\le 10^{18} n1018

  • 因为 n × n n\times n n×n网格是沿对角线对称的。
  • 如果一方在非对角线位置涂色,另一方可以在该位置的对角线镜像处涂色。
  • 如果一方在对角线位置涂色,另一个在对角线的另一个合法位置涂色。
  • 这样,每次先手+后手涂完后,图都是沿对角线对称的。
  • 也就是说,只有在对角线位置涂色才影响SG值
  • 易得,对角线格数(即边长)为奇数时先手赢,偶数时后手赢。

F:DFS搜索 1600

  • 给定一棵树,其中有一个红节点 x x x 和一个蓝节点 y y y
  • 选择两个不同节点 ( u , v ) (u,v) (u,v) ,如果 u u u v v v 的简单路径中不是 先经过 x x x 再经过 y y y,那么就是一条合法路径。
  • 问你有多少合法路径, 节点数 n ≤ 3 × 1 0 5 n\le 3\times 10^5 n3×105

  • 路径总数为 n × ( n − 1 ) n\times(n-1) n×(n1)
  • 考虑非法路径,一定是这样子的:在这里插入图片描述
  • 那是不是红节点的子树大小乘以蓝节点的子树大小就是非法路径总数呢?不一定是。
    在这里插入图片描述
  • 如果一个颜色节点是另一个颜色节点的直系节点的话,那么就是两个虚线处的乘积了。
  • 换个角度考虑,我们其实要求出的就是红蓝节点之间的节点个数,红节点后方的个数,和蓝节点后方的个数。

在这里插入图片描述

  • 直接两次 D F S DFS DFS ,红色节点的 D F S DFS DFS 使得节点 1 ∼ 7 1\sim 7 17 的节点颜色 +1
  • 蓝色节点的 D F S DFS DFS 使得节点 5 ∼ 12 5\sim 12 512 的节点颜色 -1
  • 最后颜色为 1 1 1 的个数 乘以 颜色为 − 1 -1 1 的个数就是答案。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值