给出n个数的数组a,每个元素非-1即1。
设 $f(a) = a_1 - a_2 + a_3 - a_4 + ...$
现有q个查询,每次查询子数组a[l,r]
中删除最少数量的元素,使得剩余数字组成的数组b其$f(b) = 0$。
Two Hundred Twenty One (easy version)
Two Hundred Twenty One (easy version)
Created by LXC on Fri May 12 13:03:52 2023
https://codeforces.com/problemset/problem/1562/D1
ranting: 1700
tag: data structures, dp, math
题意
给出n个数的数组a,每个元素非-1即1。
设 $f(a) = a_1 - a_2 + a_3 - a_4 + …$
现有q个查询,每次查询子数组a[l,r]
中删除最少数量的元素,使得剩余数字组成的数组b其$f(b) = 0$。
题解
考虑每个$a_i$被删除后剩余的数组成的数组$b_i$,其$f(b_i)$
观察到$|f(b_i)-f(b_{i+1})| = 2 或 1$
当n是奇数时所有$f(b_i)$是偶数。$b_1 = -f(a) \pm 1$而$b_n = f(a) \pm 1$,因此$b_1$和$b_n$不同符号,或者为0,而相邻$f(b_i)$相差为0或2。所以必定存在$f(b_i) = 0, i \in [1,n]$,所以答案只需删除一个。
当n为偶数时,可以删掉一个变为奇数。所以答案是删除两个。
特殊情况$f(a) = 0$就不需要删除。
代码
1 |
|