第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)

链接:https://ac.nowcoder.com/acm/contest/10272

E Evil Coordinate

题意:给定由 U、D、L、R 组成的长度为 n 字符串,问是否存在从 (0,0)开始不经过 (mx,my) 这个点的路径,输出重排后的路径。不存在则输出 Impossible

思路:通常的想法是,临近 (mx,my) 这个点时候绕路走。试想一种合理的走法,其实是存在把同一个方向上的都放在一起的走法。所以可以把所有的同一个方向上的走法放在一起,枚举 24 种排列。

总结:首先分析它的合法的路径,然后看看这种路径,存不存在一些等价的、更加简单的路径。总之,就是找到更加便捷的等价路径。

F Fireworks

思路:放 x 次烟花需要的时间是: x n + m 1 − ( 1 − p ) x \frac {xn+m}{1-(1-p)^x} 1(1p)xxn+m。三分 x ,然后取极值。

H Harmonious Rectangle

思路:填三个数,一共 9 种不同的排列,但其实 00 、11、22是冲突的,当 max(n,m)>7 时候,就必然成立了。所以在小数据的时候暴力不合法的情况就好了。

  • 首先可以看到的是,不合法的情况比合法的情况要少的多。所以想着去找不合法的情况。
  • 然后可以看到:枚举的组合只有 9 种。其他都必然合法。那么就直接暴力小数据就好了。

J Just Another Game of Stones

题意:维护两种操作

  • 1 l r x 对区间 [l,r] 的元素取 m a x ( a i , x ) max(a_i,x) max(ai,x)
  • 2 l r x 对区间 [l,r] 的元素以及 x 做 nim 博弈,问有多少种胜利的取法。

思路

  • 对于操作一,直接用 segment tree beats 维护
  • nim 博弈成立的条件是异或和大于 0 。等于 0 直接输出答案。首先取到区间 [l,r] 和 x 异或值,设为 a 。那么对于一堆数量为 b 的石子来说,它存在取法的条件就是:b>b xor a 。只有 b 大于 b,才能够从 b 中拿一些石子,使得 b 变成 b xor a。从而使得下一步的异或结果为 0 。
  • 所以就是计数 满足 b>b xor a 这个条件的 b 的数量。假设 a 的最高位为 p ,可以发现只有 b 的第 p 位也为 1 ,才会满足条件。
  • 所以最后就是查询区间内,第 p 位为 1 的个数以及区间的异或和
  • 所以维护区间内,每一位的个数就好了。

K K Co-prime Permutation(签到)

思路:gcd(a,a-1) =1,因此移位构造 k 个就好了。

L Let’s Play Curling(签到)

思路:把 b 数组的两个元素作为间隔,找最多的 a 的数量。对 a 数组进行二分就好了。

M Monster Hunter

思路:设 f [ u ] [ k ] [ 0 / 1 ] f[u][k][0/1] f[u][k][0/1] 表示以 u 为根的子树中使用 k 次魔法 u 是否使用魔法的最小花费。可以得到转移:

  • f [ u ] [ i + j ] [ 1 ] = f [ u ] [ i ] [ 1 ] + m i n ( f [ v ] [ j ] [ 0 ] , f [ v ] [ j ] [ 1 ] ) f[u][i+j][1]=f[u][i][1]+min(f[v][j][0],f[v][j][1]) f[u][i+j][1]=f[u][i][1]+min(f[v][j][0],f[v][j][1])
  • f [ u ] [ i + j ] [ 0 ] = f [ u ] [ i ] [ 0 ] + m i n ( f [ v ] [ j ] [ 0 ] + v a l [ v ] , f [ v ] [ j ] [ 1 ] ) f[u][i+j][0]=f[u][i][0]+min(f[v][j][0]+val[v],f[v][j][1]) f[u][i+j][0]=f[u][i][0]+min(f[v][j][0]+val[v],f[v][j][1])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值