ARC060

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=fi1,j,k+[j1 and kai]fi1,j1,kai

答案为 ∑ 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[iAj=1naj]fn,i,iA

code

D

首先 n < s n<s n<s 肯定是不合法的。

数据范围引导我们往 O ( n ) \text{O}(\sqrt{n}) O(n ) 的方向上想,考虑根号分治。

b ≤ n b \leq \sqrt{n} bn 时,暴力枚举检验即可。

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+nbnb=s

⌊ n b ⌋ ( b − 1 ) = n − s \lfloor \frac{n}{b} \rfloor (b-1)=n-s bn(b1)=ns

i = ⌊ n b ⌋ i=\lfloor \frac{n}{b} \rfloor i=bn,因为 b > n b > \sqrt{n} b>n ,所以有 i ≤ n i \leq \sqrt{n} in ,考虑暴力枚举 i i i,于是有

i b − i = n − s ib-i=n-s ibi=ns

b = n − s + i i b=\frac{n-s+i}{i} b=ins+i

注意检验 b > n b > \sqrt{n} b>n

code

E

显然有贪心,即每天一定会走到最远能到达的旅店。

但每次跳链显然会超时,倍增优化即可。

code

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[1n1],Sn,故第一问答案为 2 2 2,第二问答案不超过 n − 1 n-1 n1 个,所以你膜了个什么。

正反跑两遍 k m p kmp kmp 就行,时间复杂度 O ( n ) \text{O}(n) O(n)

code

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值