Loading

【总结】JXOI

找不到几题啊,毫无存在感的省份。

[JXOI2017]数列

数数题。

\(n,r\) 很小,显然 DP。

模拟观察一下得到每次在数列后面接一个数,等价于将可填范围缩小。

对于当前范围我们用三元组 \((l, k, r)\) 表示,表示填的数必须在 \([l,r]\) 内,而上一个数是 \(k\)

枚举当前位 \(i\) ,讨论一下 \(i=l/k/r\)\(i < k\)\(i > k\) 的情况。

所以我们记录状态 \(f[i][l][r][k]\) ,转移是连续的一段,直接前缀和优化。

[JXOI2017]颜色

由于删除后剩下的序列非空且连续,所以剩下的一定是个区间,我们计算有多少个区间可以剩下即可。

枚举右端点,计算有多少个可行的左端点。

所以我们定义状态 \(f[i]\) 表示已 \(i\) 为右端点的方案数,那么对于 \(i\) ,计算出最大的 \(j\) 使得区间 \([j,i]\) 合法,可以得到转移 \(f[i] = f[j] + 1\)。答案就是 \(\sum f\)

计算 \(j\) 可以用线段树维护颜色。时间复杂度 \(\mathcal{O}(N\log N)\)

[JXOI2017]加法

比较套路的题,我们要使最小值最大,先二分答案,然后直接贪心即可。

具体的贪心策略从左往右扫一遍,如果当前位置 \(<mid\) ,那么选择可以覆盖当前位置的区间中右端点最靠右的加上即可。用堆维护决策集合即可。时间复杂度 \(\mathcal{O}(N\log^2 N)\)

[JXOI2018]游戏

对于在一个位置 \(i\) ,如果区间 \([l,r]\) 中没有它的真约数,显然它只能被自己覆盖。否则被它的真约数覆盖一定最优,直接删掉即可。

所以我们用类似埃式筛将不必要的数删掉。剩下 \(x\)​​ 个数,直接爆算得到答案。 复杂度不会证,反正不会劣于 \(\mathcal{O}(N\log N)\)​。

\[Ans = \sum\limits_{i = x}^n i\times x!\times (n-x)!\times \binom{i - 1}{x - 1} \]

[JXOI2018]守卫

关键条件,每个守卫只能看左边。

所以对于一个区间 \([l,r]\) ,第 \(r\) 个位置上一定要站一个人。

我们计算 \(r\) 位置上看到的最左边的人 \(x\),显然 \(x\) 左边的人看不到右边,\(x\) 右边的人看不到左边,就是两个子问题。然后直接动态规划即可,\(f[l][r]\) 表示区间 \([l,r]\) 需要的最少守卫数量。

[JXOI2018]排序问题

显然这个期望和初始的顺序没有关系,所以期望就是一次排序成功的倒数。

总方案数是 \(n!\) ,能排序成功的方案有 \(\prod c_i!\) 个,所以期望就是 \(\dfrac{n!}{\prod c_i!}\)

现在我们可以改变在 \([l,r]\) 范围内的 \(c\),显然每次在最小的上面 \(+1\) 即可,模拟一下可以做到线性。

还要排序,时间复杂度 \(\mathcal{O}(N\log N)\)

posted @ 2021-07-21 15:56  7KByte  阅读(170)  评论(0编辑  收藏  举报