【8.7】代码源 - 【抽卡】【LCM与GCD】

#968. 抽卡

题意:

在这里插入图片描述
题解:UNICORN Programming Contest 2021(AtCoder Beginner Contest 225) 部分题目题解

思路:考虑 DP 。先排一下序,然后定义 d p ( i , j ) dp(i,j) dp(i,j) 表示后 i i i 个字符串选择 j j j 个拼起来的最小字典序。 d p ( i , j ) = min ⁡ ( d p ( i + 1 , j ) , s i + d p ( i + 1 , j − 1 ) ) dp(i,j)=\min(dp(i+1,j),s_i+dp(i+1,j-1)) dp(i,j)=min(dp(i+1,j),si+dp(i+1,j1)) ,注意边界条件。

有两点要说的:

  1. 我们要按照 a + b < b + a a+b<b+a a+b<b+a 的方式排序,而不是 a < b a<b a<b 的方式。比如按照后者排序为 b , b a b,ba b,ba ,但是拼起来就不是字典序最小的。我们按照前者排序,就能保证 一个子集的最小字典序拼接方式的字符串 等于 这些字符串按照排序后的下标从左到右拼起来的字符串
  2. 至于为什么倒着 DP ,大概是因为前面 i − 1 i-1 i1 个字符串的最小字典序,和当前字符串拼起来,不一定是前 i i i 个字符串的最小字典序。不是很懂。

AC代码:http://oj.daimayuan.top/submission/325124


#953. LCM与GCD

题意:

在这里插入图片描述
思路:又是一个推公式题。等价于 x ⋅ a gcd ⁡ ( a , b ) ⋅ b gcd ⁡ ( a , b ) − y = k gcd ⁡ ( a , b ) x\cdot \frac a{\gcd(a,b)}\cdot \frac b{\gcd(a,b)}-y=\frac k {\gcd(a,b)} xgcd(a,b)agcd(a,b)by=gcd(a,b)k ,容易知道 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 一定是 k k k 的因子,根号枚举因子即可。

对于一个枚举的因子,我们再推公式: a gcd ⁡ ( a , b ) ⋅ b gcd ⁡ ( a , b ) = k gcd ⁡ ( a , b ) + y x = M \frac a{\gcd(a,b)}\cdot \frac b{\gcd(a,b)}=\frac{\frac k {\gcd(a,b)}+y}x=M gcd(a,b)agcd(a,b)b=xgcd(a,b)k+y=M ,问题转化为有多少对数互质且乘积为 M M M 。根号枚举计算质因子种类即可。

AC代码:http://oj.daimayuan.top/submission/325163

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值