C
令 f i , j , k f_{i,j,k} fi,j,k 表示前 i i i 个数中选了 j j j 个和为 k k k 的方案数,有 f i , j , k = f i − 1 , j , k + [ j ≥ 1 a n d k ≥ a i ] f i − 1 , j − 1 , k − a i f_{i,j,k}=f_{i-1,j,k}+[j \geq 1 \ and \ k \geq a_i]f_{i-1,j-1,k-a_i} fi,j,k=fi−1,j,k+[j≥1 and k≥ai]fi−1,j−1,k−ai。
答案为 ∑ i = 1 n [ i A ≤ ∑ j = 1 n a j ] f n , i , i A \sum_{i=1}^n [iA \leq \sum_{j=1}^n a_j] f_{n,i,iA} ∑i=1n[iA≤∑j=1naj]fn,i,iA。
D
首先 n < s n<s n<s 肯定是不合法的。
数据范围引导我们往 O ( n ) \text{O}(\sqrt{n}) O(n) 的方向上想,考虑根号分治。
当 b ≤ n b \leq \sqrt{n} b≤n 时,暴力枚举检验即可。
当 b > n b > \sqrt{n} b>n 时,由于位数最多只有两位,考虑列出方程
⌊ n b ⌋ + n % b = s \lfloor \frac{n}{b} \rfloor + n \% b =s ⌊bn⌋+n%b=s
⌊ n b ⌋ + n − ⌊ n b ⌋ b = s \lfloor \frac{n}{b} \rfloor + n - \lfloor \frac{n}{b} \rfloor b=s ⌊bn⌋+n−⌊bn⌋b=s
⌊ n b ⌋ ( b − 1 ) = n − s \lfloor \frac{n}{b} \rfloor (b-1)=n-s ⌊bn⌋(b−1)=n−s
设 i = ⌊ n b ⌋ i=\lfloor \frac{n}{b} \rfloor i=⌊bn⌋,因为 b > n b > \sqrt{n} b>n,所以有 i ≤ n i \leq \sqrt{n} i≤n,考虑暴力枚举 i i i,于是有
i b − i = n − s ib-i=n-s ib−i=n−s
b = n − s + i i b=\frac{n-s+i}{i} b=in−s+i
注意检验 b > n b > \sqrt{n} b>n。
E
显然有贪心,即每天一定会走到最远能到达的旅店。
但每次跳链显然会超时,倍增优化即可。
F
本来还以为是什么高深的 d p dp dp,结果发现是诈骗题。
若 S S S 本身不循环则答案为 1 1 1 \ 1 1 1。
若 S S S 循环节为 1 1 1,则答案为 n 1 n \ 1 n 1。
若循环节不为 1 1 1,那么显然可以分成 S [ 1 ⋯ n − 1 ] , S n S[1 \cdots n-1],S_n S[1⋯n−1],Sn,故第一问答案为 2 2 2,第二问答案不超过 n − 1 n-1 n−1 个,所以你膜了个什么。
正反跑两遍 k m p kmp kmp 就行,时间复杂度 O ( n ) \text{O}(n) O(n)。