牛客周赛143-质因数分解/差分/状压DP+轮廓线+并查集/动态规划+线段树+坐标压缩
541 字
3 分钟
牛客周赛143-质因数分解/差分/状压DP+轮廓线+并查集/动态规划+线段树+坐标压缩
牛客周赛143-EF未补
https://ac.nowcoder.com/acm/contest/134529#question
A-模拟
题意比较乱,实际上,直接输出1,n即可
x = int(input())print(1,x)B-counter
map后计数并加上是0的即可
from collections import Countern, m, x = map(int, input().split())a = list(map(int, input().split()))cnt = Counter(a)ans = 0for v in cnt.values(): if v <= x: ans += 1ans += (m - len(cnt))print(ans)C-质因数分解
题意:
给你x和y求x*y所有正因子的d**d和
题解:
分别分解x和y,合并质因数指数,利用合并后的质因数生成所有因子,求和即可
MOD = 10 ** 9 + 7def fc(num): factors = {} d = 2 while d * d <= num: if num % d == 0: cnt = 0 while num % d == 0: num //= d cnt += 1 factors[d] = factors.get(d, 0) + cnt d += 1 if d == 2 else 2 if num > 1: factors[num] = factors.get(num, 0) + 1 return factorsdef get_factors(factors): res = [1] for p, e in factors.items(): new = [] for f in res: mul = 1 for _ in range(e + 1): new.append(f * mul) mul *= p res = new return resx, y = map(int, input().split())fac_x = fc(x)fac_y = fc(y)for p, e in fac_y.items(): fac_x[p] = fac_x.get(p, 0) + ec = get_factors(fac_x)ans = 0for d in c: ans = (ans + pow(d, d, MOD)) % MODprint(ans)D-差分
题意:
有一些区间,选择一个长度为K的区间,使得与这个区间相交的给定区间的数量最多
题解:
对于给定区间 与 相交,等价于:
即:
即:
因此,区间 能与 相交的 的范围是
每个给定区间对应一个 的可选区间 。我们要求一个点 被最多的这样的区间覆盖。
转换为一维区间最大重叠问题:给定若干区间 ,求一个点被覆盖的最大次数。
n, k = map(int, input().split())g = []for _ in range(n): l, r = map(int, input().split()) g.append((l - k, 1)) g.append((r + 1, -1))g.sort()cur = 0ans = 0for _, d in g: cur += d ans = max(ans, cur)print(ans)E:状压DP+轮廓线+并查集
F:动态规划+线段树+坐标压缩
牛客周赛143-质因数分解/差分/状压DP+轮廓线+并查集/动态规划+线段树+坐标压缩
http://blog.7a7a68.xyz/posts/牛客周赛143-ef未补/ 相关文章 智能推荐
1
牛客周赛146-计数/哈希+子序列DP+博弈
nowcoder 牛客周赛146-solve5
2
牛客周赛145-图论/生成树/DSU+构造
nowcoder 牛客周赛145-solve4-补EF
3
牛客周赛149①B-构造②C-构造③D-数学+前缀和+二分④E-状态机DP
nowcoder 牛客周赛149
4
牛客周赛148-①埃氏筛+试除法②区间交集③前缀异或+贪心④构造+位运算+异或
nowcoder 牛客周赛148-solve4-补D
5
509周赛-①Q1-枚举②Q2-状态机DP/前后缀分解③枚举质因子/线段树/前缀和④Manacher
LeetCode LeetCode509周赛
随机文章 随机推荐