ARC

id 编号 简要题意 题解 备注
D arc082D 给定一个排列, 可以进行交换相邻两个元素的操作, 要使得最后的这个排列第 i 个位置上的数不等于 i, 问最小的操作次数。 考虑如果第 i 位的数 p[i] 等于 i, 则 p[i] 一定不等于 i+1, 所以交换 i,i+1 两个位置上的数之后 p[i+1] 一定不等于 i+1, 可以发现这样的操作需要的步数最小。 时空复杂度: O(n)
C arc134C 将 K 种球(每种球有一个数量 a[i])放到 N 个盒子里, 求每个盒子中第一种球占大多数的方案数(mod 998244353)。 考虑先放第一个球再放其他的球, 直接组合数计算即可。注意 C(n,m) 中的 m 较小 n 较大, 不能预处理阶乘求解, 应使用暴力枚举分子分母阶乘的方式。 时间复杂度: O(NK) 空间复杂度: O(N)
C arc131C 给定 n 个数字 A[1], A[2],...,A[n] 有两个人交替进行一次操作, 每次操作可以取出一个数(不放回), 如果某个人取出的这个数等于剩下数字的 XOR 和, 则这个人获胜。两个人都按照最优策略, 问最后谁能获胜。 如果 n 为奇数, 手玩一下发现先手获胜。 如果 n 为偶数, 如果先手不能一步取胜, 局面转化成 n 为奇数, 原来的后手先走的情况, 则原来的后手胜。 时空复杂度: O(N)
C arc090C 给定一个 2*n 的矩阵, 求给定路径上取数和的最大值。 直接 暴力dp 即可 时空复杂度: O(2*n) 即 O(n)
C arc119C 给定一个序列, 每次可以对 a[i],a[i+1] 进行 +/- 1 操作。问有多少个 1<=l<r<=n, 使得原数列能通过一系列操作, 将 a[l~r] 全变成 0. 设 b[i]=a[i]*((i&1)?1:-1), 则原来的问题转化成为有多少个 1<=l<r<=n, 使得 \sum_{i-l}^r b[i] = 0. 用 map 求解即可 时空复杂度: O(n)
C arc082C 给定一个序列, 可以对 1<=i<=n, a[i] 进行 +/- 1 操作或者不进行操作. 最大化相同的 a[i] 数量 开个桶记录 a[i],a[i]+1,a[i]-1 的数量, 输出最大的即可。 时空复杂度: O(n)
C arc099C 给定一个长度为 n 的序列, 每次可以选择连续 k 个数将这些数赋值为这 k 个数中的最小值。 注意连续的 k 个数都为最小值时不需要操作, 剩下的 m 个数需要 ceil((m-1)/(k-1)) 次操作 时空复杂度: O(n)
B arc111B 给出 n 个数对, 每个数对可以拿出其中一个数, 求最后拿出的数中不同的数最多有多少个。 对每个数对之间连一条边。问题转化成每一条边选一个端点能覆盖到的端点的最大数量。考虑对每个连通块 s 处理,手玩一下发现如果这个连通块是一棵树, 对答案的贡献就是 s.size()-1; 否则贡献为 s.size(). 连通块可以用权值并查集维护。 时间复杂度: O(nlogn) 空间复杂度: O(n)
B arc125B 买披萨, 可以花 C_A 的钱买一个 A 类披萨, C_B 的钱买一个 B 类披萨, 2*C_AB 的钱买一个 A 类一个 B 类的披萨。求买 D_A 个 A 类披萨, D_B 个 B 类披萨需要的最小花费。 分类讨论, 对不用 C_AB 和用 C_AB 进行分讨。 注意还要处理只用 C_AB 的情况。 时空复杂度: O(1)
C arc108C 给定一个序列, 每次操作可以改变一个位置的值。求使得最后的序列变成 i 为奇数的位置的数 a[i] 相同且 i 为偶数的值 a[i] 相同且没有相邻的两个位置的数 a[i],a[i+1] 相同的最小操作步数。 记录奇数位置上的相同数字的最大值res1和次大值se_res1与偶数位置上的res2,se_res2. 直接分相邻数字是否相同分类讨论即可。 时空复杂度: O(n)
C arc116C 询问 1<=x,y<=N, x^2-y 为完全平方数(包括0)的个数(mod 998244353)。 设 x2-y=k2 , 则 y=(x-k)(x+k). 其中 x-k <= sqrt(y), 且 (x-k)≡(x+k) (mod 2), 考虑 sqrt(n) 的复杂度枚举 (x-k) 计算即可。 时间复杂度: O(sqrt(n))
posted @ 2022-03-22 16:42  Jairon  阅读(51)  评论(0)    收藏  举报