Live2D

Solution Set -「LOCAL」冲刺省选 Round XXVII

Summary

  还行,B 题挺不错,C 题就省选来说有点水(?

Solution

A 分裂

  初始时,你有一个 1 级球,每次可以把一个 k 级球变成 k+1k+1 级球,请构造恰好得到 n 个球的方案,仅需输出最终球的等级和对应数量。

  多测,T104n1018,你需要保证所有方案中球的等级种类之和不超过 107


  一开始去优化“球的数量之和”,大大地伪了一发。

  注意部分分有个 n 是阶乘,而阶乘的时候等级种类自然是最少的,所以我们先找到最大的 x!n,先把 1 级球不停操作得到 x!x 级球,此时再取一定数量的 x 级球操作到 x+1 级球,设 n 为还需要的球的数量,那么 nx。通过升级一个 k 级球,还原 kk 级球,可以使 n 减少 1,模拟几次就行。

  阶乘的是指数级,那么复杂度为 O(Tlogn),每次使用不超过 4 种等级。

B 未来

  给定长度为 n,字符集为 {r,g,b} 的字符串 S,对其进行 m 次变换,每次变换使 S 变为 S,若 Si=S(i+1)modnSi=Si,否则 Si={r,g,b}{Si,S(i+1)modn}。求变换后的最终序列。

  n5×105


  套路性地去想一个具有交换律、结合律的整数运算来等价表示两个字符的运算结果。进而,令三种字符为 0,1,2,可以构造出这样的运算:ab=((a+b))mod3,并且这个负号仅由 m 决定,问题被转化成:给定序列 {an},每次操作令 ai=ai+a(i+1)modn,求 m 次操作后每个 aimod3

  若 ai 的值在下标移动 d 次后更新到了 aj,那么贡献系数显然是 (md),注意仅对 3 取模,所以对它 Lucas 一发,设 m=3mkm 的三进制分解(如果某个幂次数是 2,加两次),就组合意义上,我们可以依次对 {an} 施加 3m1 次操作,再施加 3m2 次操作,……最后总共施加 m 次操作。每次操作中,贡献系数都是 (3mid),因而 d=0d=3mi 时,才能使系数非 0,这个可以 O(n) 模拟一遍算出来,所以总复杂度 O(nlogm)

C 回忆

  给定一个 n×m 的网格,(i,j)ai,j 的概率可用,求可用单元格构成的四联通块中,最大块大小的期望。

  nm40


  你能想到最暴力的插头 DP:按列转移,状态数组直接 map<pair<vector<int>, vector<int> >, int>,过了。打了下表,有效状态数不超过 105

posted @   Rainybunny  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-03-07 Solution -「USACO 2020.12 P」Spaceship
点击右上角即可分享
微信分享提示