前言:
题目质量还是不错的。记录两道没A掉的题
D.失忆药水:二分图,结论
题目大意:
给你一张完全图,让你删掉最少的边使得其不含奇环.
思路:
定理要知道:二分图不含奇环。
那么我们就是将图转化成一个完全二分图即可。
一张完全二分图的边的个数为: x ∗ y x * y x∗y.
想让边最多,自然是均分点。答案为: n 2 ∗ ( n − n 2 ) \frac{n}{2}*(n-\frac{n}{2}) 2n∗(n−2n)
F.牛牛的序列
题目大意:
给 q q q个区间 [ L , R ] [L,R] [L,R].问你区间内每个数的因子和的总和的奇偶性.
q ≤ 1 e 5 , 1 ≤ L , R ≤ 1 e 18 q \leq 1e5 , 1 \leq L , R \leq 1e18 q≤1e5,1≤L,R≤1e18.
题目思路:
还是得严格的从数论角度分析问题,不然问题分析不完全啊!
回顾一下基础数论知识:
由唯一分解定理得到: x = p 1 a 1 p 2 a 2 . . . p k a k x =p_1^{a_1}p_2^{a_2}...p_k^{a_k} x=p1a1p2a2...pkak
根据乘法原理和唯一分解定理,
其因数个数 π ( x ) = ( a 1 + 1 ) ( a 2 + 2 ) . . . ( a k + k ) \pi(x)=(a_1+1)(a_2+2)...(a_k+k) π(x)=(a1+1)(a2+2)...(ak+k)
因数和为 f ( x ) = ( 1 + p 1 1 + . . + p 1 a 1 ) ∗ ( 1 + p 2 1 + . . + p 2 a 2 ) ∗ . . . ∗ ( 1 + p k 1 + . . + p k a k ) f(x)=(1+p_1^{1}+..+p_1^{a_1})*(1+p_2^{1}+..+p_2^{a_2})*...*(1+p_k^{1}+..+p_k^{a_k}) f(x)=(1+p11+..+p1a1)∗(1+p21+..+p2a2)∗...∗(1+pk1+..+pkak)
由于区间可加性,那么问题就是快速求区间 [ 1 , x ] [1,x] [1,x]中有多少个 f ( i ) f(i) f(i)是奇数.
所以重点分析式子 f ( x ) f(x) f(x):
要让 f ( x ) f(x) f(x)为奇数。那么也就是每个括号的结果为奇数。(只有奇数*奇数还是奇数)
由于质数一定是奇数,奇数的任意次幂还是奇数。所以想让括号结果为奇数。那就得使得每一个 a i a_i ai都为偶数,使得每个括号恰又奇数项。这样才能使 f ( x ) f(x) f(x)为奇数.
特例: 2 2 2是唯一一个为偶数的质数。那么它不管出现多少次,它括号的结果都一定是奇数。
所以当 a 2 a_2 a2为偶数时, x x x就是一个完全平方数。
当 a 2 a_2 a2为奇数时, x x x就是某一个完全平方数的2倍。
所以结论就是:当 x x x是一个完全平方数或者一个完全平方数的两倍时, f ( x ) f(x) f(x)是奇数,对答案有贡献。
那么问题转化为求解: [ 1 , n ] [1,n] [1,n]中完全平方数的个数以及它们的两倍的个数.
前者答案是 n \sqrt{n} n,后者答案是 n 2 \sqrt{\frac{n}{2}} 2n.若有精度差,可以用两个二分分别求它们的个数。或者暴力解一下(作者给出的方法,还是不错的).
ll sqr(ll x){
ll y=sqrt(x)+1;///此时一定满足y*y≥x
while(y*y>x) y--;///使得y*y<=x
return y;
}