模拟43 题解
A. A
发现不断加a,乘b。
枚举将s乘k次b,则有
$t=s*b^k+\sum \limits_{i=0}^{k-1}used[i]*a*b^i$
答案即是使得$\sum \limits_{i=0}^{k-1}used[i]$最小的方案。
将s,t表示为b进制会比较好算。
当a=1时,贪心地选择就可以了。
然后a!=1就不会打了。
其实将差值除一个a,问题就转化为了a=1的问题。
B. B
通过打表发现一些性质:
若$gcd(i,p)=gcd(j,p)$,则$ans(i)=ans(j)$。
在数据范围$p<=1e9$内,p最多只有不到两千个因子。
所以将p个数分为因子个数个组,
每个组中的每个元素与p的gcd相同,设为k,
则取k为这个组的代表元素,这个组的元素个数为$phi(p/k)$。
所以直接将最暴力$O(n*p^2)$的dp改为$O(n*d(p)^2)$,$d(x)$为x的约数个数。
C. C
最近做了很多关于区间覆盖的题,然而都没有做出来。
大致思路都是将这些区间先按左端点排序。
同理,本题排序后贪心。
因为本题中有一个很关键的性质:每个区间的权值都为1。
所以从左到右考虑每个点,取得跨过这个点的右端点最靠右的区间就可以了。
然而有一个特殊的区间,处理方式是枚举选特殊区间多少次。
这个复杂度是有问题的,所以考虑三分选的次数,就可以了。