XXI Open Cup named after E.V. Pankratiev. Grand Prix of NorthBeach
最后1h过了两题。不过最后是双开,不然应该过不了这么多。
想得还是太慢了。代码实现能力也差了一点。
A. Arrange and Count!
以后都给我写双哈希!!
1 |
|
B. Build More 2020’s!
不太会啊。。。
二分答案 $x$,维护 $x$ 个栈表示当前填的情况。
遇到 $0$ 优先填 $2$,遇到 $2$ 优先开一个。
时间复杂度 $O(n\log n)$。
C. Choose Two Subsequences
D. Determinant Strikes Back
线性代数基础题or找规律。
找规律/结论就不说了。
显然一个方阵 $A$ 的特征值为 $0$ 的数量为 $n-rank(A)$。因为特征值相当于沿着某个特征向量的放大倍数。
矩阵 $A_{ij}=a_ib_j$ 的秩显然为 $1$,因此原式一定为 $x^n+x^{n-1}\times K$ 的形式。然后就简单了。
1 | const ll mod=1e9+7; |
E. Efficient Data Structure
$c_i=\max_j{a_j+b_{j+1}+b_{j+2}+\cdots+b_i}=s_i+\max_j{a_j-s_j}$,其中 $s_i=\sum_{j\le i} b_j$。
随便维护。
H. Hamming Distance
性质:$i$ 这个数的所有出现位置为 $2^{i-1}+k\cdot 2^{i},k\geq 0$。
距离和比较简单,枚举一下每个 $a_i$,算出其一左一右的位置就好了。
对于最小值,我们找到最小的 $k$ 使得 $2^k-1\geq n$。
那么 $n$ 个数不会跨越两个以上的 $S_k$ (注意这里需要稍微特判一下 $m$ 比较小的情况),而整个串必然是 $S_k+x_1+S_k+x_2+S_k+\cdots$ 这样的形式。
那么直接将大于 $k$ 的都看成 $k+1$,整个 $S_m$ 看成 $S_{k+1}$ 即可。
剩下的利用等差数列的性质,从 $1$ 到 $k+1$ 枚举每个数字,类似统计距离和的方法,使用个前缀和即可 $O(n\log n)$ 完成。
有一点细节。
1 |
|
I. Integers and Ranges
根据套路,删掉重合的线段,然后区间具有单调性。
将 $0\sim 9$ 分为 ${0,9},{3,6},{1,2,4,5,7,8}$ 三类。
一个区间里面只要有 $2$ 个或以上 $3$ 的因子就可以满足条件了。
那么设 $f_{i,j}$ 表示考虑到 $i$ 且第 $1$ 个 $3$ 的因子在 $i$ 这,第 $2$ 个 $3$ 的因子在 $j$ 这,$l\le j$ 的区间全部满足条件的方案数。
转移分两类即可:
放 $3$ 或 $6$:$f_{i,j}=\sum {k} f{j,k}\times 2\times 6^{j-i-1}\times [\forall r\in[j,i-1],l\le k]$
放 $0$ 或 $9$:$f_{i,i}=\sum_{j,k} f_{j,k}\times 2\times 6^{j-i-1}\times [\forall r\in[j,i-1],l\le k]$
后缀和优化一下即可。
时间复杂度 $O(n^2)$。
1 | const int N=1005; |