2021 年百度之星·程序设计大赛 - 初赛三

数字游戏

存在至少一种方案,当且仅当 m i n ≤ a v e ≤ m a x min \le ave \le max minavemax 并且 m i n ∗ ( n − 1 ) + m a x ≤ a v e ∗ n ≤ m i n + m a x ∗ ( n − 1 ) min * (n-1)+max \le ave * n \le min + max * (n - 1) min(n1)+maxavenmin+max(n1)

https://paste.ubuntu.com/p/NMXwPBWqBF/

网格路径

因为第一步只能从 ( 1 , 1 ) (1,1) (1,1) 走到 ( 1 , 2 ) (1, 2) (1,2) ( 2 , 1 ) (2, 1) (2,1),所以不相交路径最多只有两条。我们可以用如下方法构造两条路径:

  1. 对于第一条路径,每次能向右走(走完以后可以顺利走到终点)就先向右走,不能向右走就向下走;
  2. 对于第二条路径,每次能向下走(走完以后可以顺利走到终点)就先向下走,不能向下走就向右走;
    接下来判断一下这两条路径是否存在以及是否相交就可以啦!

https://paste.ubuntu.com/p/b76XRkk593/

虫族基地

分如下几种情况考虑:

  1. ( 1 , 1 ) (1, 1) (1,1) 被第一个虫族基地占领了;
  2. ( n , m ) (n, m) (n,m) 被第二个虫族基地占领了;
  3. 1 个虫族基地扩张,占领了完整的一列;
  4. 2 个虫族基地扩张,并且领地切断了所有 ( 1 , 1 ) (1, 1) (1,1) ( n , m ) (n, m) (n,m) 的路径;
    在这些代价中取最小值即可。

https://paste.ubuntu.com/p/HQrq6x6595/

环上游走

暴力 dfs就可以过啦(如果当前走到的格子之前没走到过,就继续走,否则就回溯)!

https://paste.ubuntu.com/p/KTPdKn6rCH/

怀旧游戏

f [ i ] [ j ] [ k ] [ l ] f[i][j][k][l] f[i][j][k][l] 表示先手手上的数字是 i , j i, j i,j,后手手上的数字是 k , l k, l k,l 时,先手的胜负情况。初始先手必败的情况比较好处理( k k k l l l 是 0,意味着先手已经输了),接着反向 bfs,对于一个状态,如果它存在一个先手必败的后续状态,则这个状态先手必胜;如果它所有的后续状态都是先手必胜的,则这个状态先手必败。
对于无法确定胜负的状态,都是平局。

https://paste.ubuntu.com/p/M9KJzDCBZy/

消消乐

先处理完所有的终止状态(填满 8 个格子的不可以消除的状态),这些状态最后的期望得分都是 0。对于每个消完以后的状态 x x x(从初始的 8 个格子开始消,在新方块出现前的状态),我们可以枚举新方块的颜色情况,同时也知道了每种情况下消完以后的状态 y y y 是啥样,以及得到了多少分,同时我们也知道从 x x x 变成 y y y 的概率,我们把期望方程列出来,高斯消元即可。

https://paste.ubuntu.com/p/XtKPn9mwVC/

二叉树

f [ i ] [ j ] f[i][j] f[i][j] 表示以 i i i 为根的子树,这棵子树进出的点的数目为 j j j 时( j j j 可正可负,表示点是净移入还是净移出)在子树 i i i 中花费的最小代价。对于每个 i i i,由于它只能有 2 个儿子,所以我们需要再做一次背包来计算 f f f

https://paste.ubuntu.com/p/6z8VTF78rF/

数据结构

将区间视为平面上的点,如果一种颜色在区间内出现至少一次,需要考虑取答案对应的区间为:

  1. 区间内相邻两次出现之间。
  2. 区间左端点到区间内第一次出现。
  3. 区间内最后一次出现到区间右端点。

可以用扫描线加线段树解决。

https://paste.ubuntu.com/p/M2bmSqysgW/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾海、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值