赛后总结-Codeforces Round 1063 (Div. 2)(虚拟参赛)

Codeforces Round 1063 (Div. 2)

A. Souvlaki VS. Kalamaki

给定一个长度为 \(n\) 的数组 \(a\)。游戏有 \(n-1\) 轮,奇数轮 Souvlaki 行动,偶数轮 Kalamaki 行动。每轮可以:跳过,或交换当前轮号对应的元素与下一个元素。

如果最终数组非递减,则 Souvlaki 赢,否则 Kalamaki 赢。在游戏开始前,Souvlaki 可以任意重排数组 \(a\)

问是否存在一种初始排列,使得 Souvlaki 有必胜策略。

升序排序,判断 Kalamaki 操作时是否只能交换相同的数。

B. Siga ta Kymata

给定一个 \(1\)\(n\) 的排列 \(p\) 和一个初始全 \(0\) 的二进制串 \(s\)。你可以进行最多 \(5\) 次操作:每次选择 \(l\)\(r\),对于所有满足 \(l < i < r\)\(p_i\)\(p_l\)\(p_r\) 之间的位置 \(i\),将 \(s_i\) 设为 \(1\)。给定目标二进制串 \(x\),要求最终所有 \(x_i\)\(1\) 的位置 \(s_i\) 必须为 \(1\)。输出任意一个不超过 \(5\) 步的操作序列或判断不可能。

设排列 \(p\) 的最大值为 \(p_i\),最小值为 \(p_j\)\(i\)\(j\) 表示下标。

无解的情况:\(x_1=1\)\(x_n=1\)\(x_i=1\)\(x_j=1\)

对于每个满足 \(x_k\)\(1\) 的位置 \(k\)

  • \(p_k > \max(p_1,p_n)\)\(k<i\),选择区间 \([1,i]\)
  • \(p_k > \max(p_1,p_n)\)\(k>i\),选择区间 \([i,n]\)
  • \(p_k < \min(p_1,p_n)\)\(k<i\),选择区间 \([1,j]\)
  • \(p_k < \min(p_1,p_n)\)\(k>i\),选择区间 \([j,n]\)
  • 其他情况,选择区间 \([1,n]\)

设计的挺巧妙的,刚好最多 \(5\) 区间。

C. Monopati

给定一个 \(2\)\(n\) 列的网格,每格有一个 \(1\)\(2n\) 的不同整数。定义函数 \(f(l, r)\) 为将原网格中值在 \([l, r]\) 内的格子设为 \(1\),其他为 \(0\) 的二进制网格。问有多少对 \((l, r)\) 使得在 \(f(l, r)\) 中存在一条从 \((1,1)\)\((2,n)\) 的路径,路径只能向右或向下走且只能走值为 \(1\) 的格子。

显然必须存在一个拐点,可以从第一行周到第二行。

枚举在那一列拐弯,设为\(k\) 计算第一行处于 \([1,k]\) 和第二行处于 \([n-k+1,n]\) 的数的最大值 \(r_k\) 和最小值 \(l_k\)。这通过对第一行求前缀最值,对第二行求后缀最值计算。

降序枚举权值左端点 \(L\),选择所有满足 \(l_k \geq L\) 的列 \(k\)\(r_k\) 最小值,设为 \(R\),这就是对于当前 \(L\) 存在可行路径的最小 \(R\)。那么对于当前 \(L\),以任意在区间 \([R,2n]\) 的数都合法,有 \(2n-R+1\) 种情况。统计每个 \(L\) 的方案数就好了。

posted @ 2025-11-24 15:48  南北天球  阅读(0)  评论(0)    收藏  举报