【11.1】【VP】Codeforces Round #729 (Div. 2)

ALL:6
AC:2
补题:2
Rank:2958


C. Strange Function

题意:定义 f ( i ) f(i) f(i) 表示最小的正数满足不是 i i i 的因子。给定 n ( 1 ≤ n ≤ 1 0 16 ) n(1\leq n\leq 10^{16}) n(1n1016) ,求 ∑ i = 1 n f ( i ) \sum_{i=1}^n f(i) i=1nf(i)

题解:CF1542C Strange Function

思路:假设 x x x i i i 的最小非因子,那么一定有 lcm ( 1 , 2 , ⋯   , x − 1 ) ∣ i \text{lcm}(1,2,\cdots ,x-1)\mid i lcm(1,2,,x1)i ,且 x ∤ i x\nmid i xi 成立。要求只满足第一条式子的数字个数,整除一下即可。如果还需要满足第二个条件,容斥一下即可。

AC代码:https://codeforces.com/contest/1542/submission/178903704


D. Priority Queue

题意:

给定一个序列 A A A A A A 的每一个元素形如 + x-,其中 x x x 为一个整数。

对于一个每个元素都形如 + x- 的序列 S S S,按如下方式计算 f ( S ) f(S) f(S) 的值:

  • 你需要依次遍历 S S S 中的元素,并且维护一个可重集 T T T

  • 对于每个 S S S 中的元素,若其为 + x,那么就将 x x x 加入 T T T,否则就删除 T T T 最小的数。特别的,若 T T T 中没有数,那么就不进行删除操作。

  • 在遍历完 S S S 中的元素后,将可重集 T T T 中所有数的和 s u m sum sum 算出来。 s u m sum sum 即为 f ( S ) f(S) f(S) 的值。

定义 b b b a a a 的子序列当且仅当 b b b 是由 a a a 在不改变原有顺序的情况下删除若干元素得到的。现在对于 A A A 的所有子序列 B B B,蓝想让你求出 f ( B ) f(B) f(B) 的和模 998244353 998244353 998244353 的值。

本题有 1 ≤ n ≤ 500 1 \leq n \leq 500 1n500,并且对于每个形如 + x 元素中的 x x x,有 1 ≤ x < 998244353 1 \leq x < 998244353 1x<998244353

题解:CF1542D Priority Queue 题解

思路:这是一道细节很多的 DP 题。

考虑求每个数字 x = a k x=a_k x=ak 的贡献次数,即出现在了多少个子序列中。

d p ( i , j ) dp(i,j) dp(i,j) 表示前 i i i 个数的所有可重子集(包括 x x x ,表示为 { a d ∣ d ∈ [ 1 , i ] , d ≠ k } ∪ { x } \{ a_{d} |d\in[1,i],d\neq k \} \cup \{x\} {add[1,i],d=k}{x} )中,有 j j j 个小于 x x x 的数字的序列个数。

DP 方程及推导详见题解。提几个要注意的细节。

  1. 对于 o p i = − op_i=- opi= 的情况,当 i < k , j = 0 i<k,j=0 i<k,j=0 时,要多转移一个,而 i > k , j = 0 i>k,j=0 i>k,j=0 时不能多转移(因为要考虑操作该 o p op op a k a_k ak 是否在集合中)。
  2. 对于 o p i = + op_i=+ opi=+ 的情况,如果 a i = a k a_i=a_k ai=ak ,为了避免算重算漏,把 i < k i<k i<k 归到一类转移,把 i > k i>k i>k 归到另一个转移。

AC代码:https://codeforces.com/contest/1542/submission/178906123

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值