标签:表示 复杂度 一个 cas else 开始 一个人 输出 ==
yyc:
D:
讨论,如果n为偶数,从最后一个开始放X,隔一个放一个,放到头重新从后放,比如 n = 4:
....
...X
.X.X
.XXX
XXXX
如果 n 为奇数,现在最后放一个 X,前边的和偶数一样讨论,比如 n = 5
..... (这里特判)
....X
...XX
.X.XX
.XXXX
XXXXX
E:
方便起见,设 m = 根号n
输入数组为 w。
离线处理。
首先数据分类,对于 b >= m 的询问暴力即可,每次查询时间复杂度 O(根号n)
对于 b < m 的询问,开一组 vector 把 b 相同的分到一类。
然后枚举所有的 b,额外开一个表示数组 p,其中 p[i] 表示(i, b)询问的答案
不难发现,对于相同的 b,有 p[i] = w[i] + p[i + b]
处理出答案输出即可,由于 b < m,所以这一部分时间复杂度总共 O(n根号n)
最终时间复杂度 O(n根号n)
mhr:
D(if else):首先分两种情况X大于一半或者小于等于一半
case: X<=一半:
看n奇偶性,若n为偶数那么.X存放方法最后肯定剩下偶数个前缀.所以我们找规律可以发现这样做不需要额外后面的点去凑数所以直接输出...X.X之类的即可
若n为奇数那么肯定.X前缀.是奇数个找规律可以找到前缀.为偶数个是前缀.个数/2所以倒数第二个.放到前面去凑偶数于是输出.....X.XX形式
case: X>一半:
这个情况的话已经没有啥区别了就是.X后面补后缀X,只需要知道总共有多少后缀X然后前面用.X放即可例如7 4就是.X.X.XX
为什么.X是最优的呢,因为无论第二个人如何转动圆柱弹膛只要第一个人不死第二个人一定死
前缀.个数规律怎么看?相同奇偶性的是相同人要经历的,所有的人经历到第一个X结束
对于转动弹膛 .X. == ..X 因为shift的关系所以肯定输出..X
标签:表示 复杂度 一个 cas else 开始 一个人 输出 ==
原文地址:https://www.cnblogs.com/QLU-ACM/p/12343230.html