每日一刷atcoder开脑 abc156

abc156

题解翻译器 2022-5-3

题目入口

官方题解入口

A题

过于简单,不解

B题

过于简单,不解

C题

过于简单,不解

D题

没看,不解

E题

题意看了之后,是比较迷的。但是根据样例我们可以发现,所谓的精确 k k k 次,是不是有什么特殊性。首先我们得到一个式子,假设最后的集合为 { a 1 , a 2 . . . . a i , . . a n } \lbrace a_1,a_2....a_i,..a_n \rbrace {a1,a2....ai,..an},要符合要求,必须满足的要求是 ∑ a b s ( a i − 1 ) ≤ k \sum abs(a_i-1) \le k abs(ai1)k,至于为什么是小于等于,而不是精确等于,这是因为传递性可以让房间里的人变化。就是样例中的 { 0 , 1 , 2 } \{0,1,2\} {0,1,2} ,清楚了这个,就明白为什么要求是小于等于了。这种情况我们就好算了,由于 a i ≥ 0 a_i \ge 0 ai0,我们可以枚举有多少个等于 0 0 0。剩下的房间至少有 1 1 1 个。
a n s = ∑ i = 0 m i n ( k , n ) ( n i ) ( n − 1 n − k − 1 ) ans = \sum _{i=0} ^{min(k,n)} {n \choose i} {n-1 \choose n-k-1} ans=i=0min(k,n)(in)(nk1n1)
剩下的房间至少有 1 1 1 个就是插板法了,经典的整数拆分。

F题

这个题比较有意思,先说复杂度是 O ( q k ) O(qk) O(qk)

对于每一个询问,如果我们要求 a i < a i + 1 m o d    m a_i < a_{i+1} \mod m ai<ai+1modm,不好求。我们反过来求 a i ≥ a i + 1 m o d    m a_i \ge a_{i+1} \mod m aiai+1modm

  1. a i = a i + 1 m o d    m a_i = a_{i+1} \mod m ai=ai+1modm

拆开我们发现, a i = ( a i + b i ) m o d    m a_i = (a_i + b_i) \mod m ai=(ai+bi)modm => b i = 0 m o d    m b_i = 0 \mod m bi=0modm,我们只需要记录有多少个 b i = 0 m o d    m b_i = 0 \mod m bi=0modm 即可

  1. 对于 a i > a i + 1 m o d    m a_i > a_{i+1} \mod m ai>ai+1modm

我们要是对 b i b_i bi 都取了模 m m m,定义 b i ’ = b i m o d    m b_i’ = b_i \mod m bi=bimodm,那么如果是 a i > a i + 1 m o d    m a_i > a_{i+1} \mod m ai>ai+1modm,必然存在 :
⌊ a i m ⌋ + 1 = ⌊ a i + 1 m ⌋ \lfloor \frac{a_i}{m} \rfloor + 1 = \lfloor \frac{a_{i+1}}{m} \rfloor mai+1=mai+1
分析一下便可以知道,由于 b i ′ < m b_i ' < m bi<m,要是 a i + 1 a_{i+1} ai+1 商多了 1 1 1 ,就一定会有模后小于 a i a_i ai

那么实际上,由于商每增加 1 1 1,就会多一个贡献,那么答案就是:
⌊ a n − 1 m ⌋ − ⌊ a 0 m ⌋ \lfloor \frac{a_{n - 1}}{m} \rfloor - \lfloor \frac{a_{0}}{m} \rfloor man1ma0
最后用 n − 1 n-1 n1 减去这两个的贡献就是答案了。

细节不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值