A. 如烟
莫名其妙挂了,我的想法是
70
70
70 分的。
预处理出从每个
c
c
c 出发能到达的点的有哪些,然后枚举判断即可。复杂度
O
(
n
3
)
O(n^3)
O(n3)。
然鹅我们发现有一个条件我们没用上:拓扑序为
1
~
N
1~N
1~N。
众所周知:题面上的条件都很有用
(
b
u
s
h
i
(bushi
(bushi
- 考虑 f [ x ] [ y ] f[x][y] f[x][y] 表示 ( x , y ) (x,y) (x,y) 是否是一个合法的点对,显然有 f [ x ] [ x ] = 1 ( 1 ≤ x ≤ N ) f[x][x]=1(1≤x≤N) f[x][x]=1(1≤x≤N)。
- 假如 ( x , y ) (x,y) (x,y) 是一个可行的点对,那么一定存在一个 x x x 的前驱 x ′ x' x′ 或 y y y 的前驱 y ′ y' y′, 使得 ( x ′ , y ) (x',y) (x′,y) 或 ( x , y ′ ) (x,y') (x,y′)是一个可行的点对。 所以我们直接跑一遍递推就行了。复杂度 O ( N 2 ) O(N^2) O(N2)。
B. 星空
首先,部分分很好考虑。
- a i = i , b i = 1 , n = m a_i=i,b_i=1,n=m ai=i,bi=1,n=m,很容易想到考虑 n n n 的奇偶性,奇数时答案为 1 1 1,否则为 0 0 0。
- a i = = b i a_i==b_i ai==bi,同样容易考虑答案,直接枚举,计算每个数出现的次数,判断奇偶性即可。
- 1 ≤ n , m ≤ 10 1≤n,m≤10 1≤n,m≤10,直接暴力求解即可。
这样就拿到了
70
70
70 分。然鹅我又写挂了,只有60分
再考虑正解:
- 注意到, 每当移动某个球时,所在框的奇偶性都会取反。
- 把筐子看成点, 那么每个球就是一条边。对于每个联通块,有奇数条边的时候,就一定会有一个半空的框子,如果有偶数个球你可以把他们两两配对消掉。
- 所以用并查集维护联通块, 然后数一下每个联通块里面的边数, 对于每个联通块如果有偶数条边, 答案不变,否则答案 + 1 +1 +1。
C. 知足
考虑第二小纸币的面值大小。设要凑出的数为 n n n 纸币数量为 k k k 时的答案为 f ( n , k ) f(n,k) f(n,k),如果第二小的纸币面值为 x x x,那么答案即为 f ( [ n x ] , k − 1 ) + ( n mod x ) f([\frac{n}{x}],k-1)+(n~\text{mod}~x) f([xn],k−1)+(n mod x)。考虑 d p dp dp ,记录 d p ( a , b , c , d ) dp(a,b,c,d) dp(a,b,c,d) 表示前面 2 , 3 , 4 , 5 2,3,4,5 2,3,4,5 的个数分别为 a , b , c , d a,b,c,d a,b,c,d 时凑出 n mod 2 a 3 b 4 c 5 d n~\text{mod}~2^a3^b4^c5^d n mod 2a3b4c5d 的最小纸币数。发现当前所求应该是 f ( [ n 2 a 3 b 4 c 5 d ] , k − a − b − c − d ) f([\frac{n}{2^a3^b4^c5^d}],k-a-b-c-d) f([2a3b4c5dn],k−a−b−c−d),枚举下一次选的是哪一种倍数,转移即可。时间复杂度 O ( k 4 ) O(k^4) O(k4)。
D. 倔强
暴力
10
10
10 分比较简单。
考虑正解:
求出每个位置能放的数字有哪些,把位置和点进行二分图匹配。因为可以将一段的数字从小到大重排,
有解当且仅当存在完美匹配。所以最暴力的做法是从小到大枚举所有格子,枚举这个格子填哪个数,填
完之后重新跑一遍二分图匹配,如果有解就可以填。总复杂度
O
(
n
8
)
O(n^8)
O(n8)。