2023 csp-s 答案(精选题)

主题目

22 - 27 题

整体解析:

solve2可以比较简单的模拟,但是一时看不出来含义,solve1的算法类似筛法,p表示是否质数,k是i的幂次数组,f存的是最小质因数,g存的是满足最小质因数的最高幂次的因数。

f[i]= f[i / g[i]]*(g[i]* f[i]- 1)/(f[i]- 1); 是最难理解的一句。

首先 f[i/g[i]],因为i/g[i]<i,所以这个f[i/g[i]] 已经是经过计算的新的值。类似动态规划中数组的复用。

(g[i]*f[i]-1)/(f[i]-1),有点像等比数列求和公式,实际上求的是1,f[i],f[i]*f[i],...,g[i]这个数列的和。

如果能联想到求一个数的约数和的公式,可以理解完整的一行,实际上是在求i的所有约数和。sum是1-n的约数和的和。

28 - 33题

整体解析:

读f函数可知,f0中的a数组是从小到大排序的,a[j]<a[i]-m,j是小于a[i]-m的最后一个位置(或者0),所以s是计算序列a中差值不超过m的数对的个数。

f0判断满足这个条件的数对个数是否>=k。本题需要看懂题目才方便做题。

f函数是一个二分查找,g=0,h=a.back()-a[0],分别是条件最紧和条件最宽松,返回值是最小的x,满足a中差值不超过x的数对个数>=k。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值