题目都不难,D题题面出锅
¶A
定义$F_j$为j各位数字之和求$\sum_{i=1}^n\sum_{j=1}^i [gcd(i,j)==1]F(j)$莫比乌斯反演,知道$\mu * I = \epsilon$,则$\sum \limits_{d \mid gcd(i,j)} 1 = [gcd(i,j)==1]$$d\mid gcd(i,j)$等价于$d\mid i,d\mid j$转换成枚举d,然后就可以$O(n\log n)$枚举倍数算了
¶B
签到
¶C
有n个区间,要求选择某些区间,定义选择出的区间的价值为min(选择的区间个数,区间交集的长度),要求最大化该价值$n \leq 3\times 10^5$显然可以二分,$O(n\log n)$的check也很简单,但是会被卡t考虑如何$O(n)$的check看价值能不能达到v,就等价于选择v个区间,且这些区间的交集的长度$\geq v$将所有区间按照左端点先排序枚举交集的区间的左端点l,则右端点为l+v-1,只要左端点小于等于l的区间中存在至少v个右端点$\geq l+v-1$即可,尺取法
¶D
有n个数字,总长度不超过$10^6$,让你求这些数字的所有本质不同子串的价值(数字大小)和我描述成本质不同子串之后,应该很容易想到exsam几个月没写概念都忘完只需要建出exsam的dag图,然后按照拓扑序dp即可,只需要知道以每个endpos集合(即图上的每个节点)结尾的所有子串的和,如u有个i的出边连向v,则就有$dp[u]\times 10+i\times |u|$的贡献,$|u|$就表示u这个endpos集合的大小,就是len[u] - len[fa[u]]交上去wa了,想到一个前导0的坑点,比如302中,02和2应该算同一个?这样应该也能做,只要把原点的0出边的状态能到达的点的endpos集合大小-1就行。其实并不是题面模998244353,数据是模1000000007,离谱
¶E
一个长度为n的序列c,求有多少个子序列满足每种数字出现偶数次$n\leq 10^6,c_i\leq 20$子序列考虑前缀和,对20种数字状压即可
¶F
让你构造一个最大的数,满足它的每个前缀都能被这个前缀的长度整除,构造的数字要求用火柴棒表示,且要求恰好使用n根$n \leq 10^{100}$稍微想想就能感觉到符合的数位数不会很大,事实上长度超过3就一定不行了,所以暴力dfs就完事了
¶G
一个集合包含1-n n个数,要求你依次选择m个数的集合,要求集合间没有交集,集合可以空,求操作的方案数转化一下,可以考虑第i个数归属哪个集合,显然有m+1种选择,没被选或者选到第j个集合。所以答案就是$(m+1)^n$python的pow自带快速幂
¶H
一个序列,要求支持修改一个数,询问以某个数为最小值的区间个数。保证序列中没有重复数字显然只要找到左右两边第一个小于你的数即可记录区间最小值,线段树上贪心着走即可
¶I
规律题
¶J
二维SG
¶K
可以从起点出发带x个物品,走第y步路的消费是$x^y$,多次询问从s到t,你拥有m元钱,则在起点最多带多少个物品。点数是100先跑个floyd,则s到t的花费就是一个等比数列,二分一下公比即可,注意公比为1的情况
¶L
n皇后,但是可以在一条斜线状压dp
¶M
输出string s+string t