前言
智商回复训练
鸽子博主终于开始打ACM了
代码有一些是队友写的所以就不贴了
Rikka with Quicksort
Description
定义
g
m
(
i
)
=
0
,
1
≤
i
≤
m
g_m(i)=0,1\le i\le m
gm(i)=0,1≤i≤m
g
m
(
i
)
=
i
−
1
+
1
i
(
∑
j
=
1
i
g
m
(
j
−
1
)
+
g
m
(
i
−
j
)
)
,
i
>
m
g_m(i)=i-1+{1\over i}(\sum_{j=1}^{i}g_m(j-1)+g_m(i-j)),i\gt m
gm(i)=i−1+i1(j=1∑igm(j−1)+gm(i−j)),i>m
给出n,m,求
g
m
(
n
)
g_m(n)
gm(n)对10^9+7取模之后的结果
n,m<=10^9
Solution
求前缀和S,答案为S(n)-S(n-1)
递推式为
S
(
n
)
=
S
(
n
−
1
)
∗
n
+
2
n
+
n
−
1
S(n)=S(n-1)*{n+2\over n}+n-1
S(n)=S(n−1)∗nn+2+n−1
简单化一下式子就是
S
(
n
)
=
(
n
+
1
)
∗
(
n
+
2
)
∗
∑
i
=
m
+
1
n
i
−
1
(
i
+
1
)
∗
(
i
+
2
)
S(n)=(n+1)*(n+2)*\sum_{i=m+1}^{n}{i-1\over (i+1)*(i+2)}
S(n)=(n+1)∗(n+2)∗∑i=m+1n(i+1)∗(i+2)i−1
后面那个东西分段打表即可
Rikka with Cake
Description
有一块n*m的蛋糕,用k条射线切开
保证任意两个射线不会在同一行或同一列
问这块蛋糕被分成了多少块
n,m<=1e9,k<=1e5
Solution
显然答案为交点个数+1
扫描线+数据结构即可
Rikka with Mista
Description
有n个数,问所有2^n种出现情况中,所有数的和的十进制表示下4的个数之和
n<=40
Solution
又在迫害米4达了(为什么不放04)
折半搜索,枚举位置i,考虑有多少个a+b这一位是4
只需要考虑所有数的后i位,枚举一个a,那么可行的b是两段区间(进位或不进位)
只需要排序+扫描线就可做到线性
排序可以用上一层的结果做双关键字桶排也可优化到线性
复杂度O(2^n/2*log W)
Rikka with Geometric Sequence
Description
问有多少个公比>1的,值域为[1,n]的自然数的等比数列
n<=5*10^17
Solution
被pow的精度坑了[○・`Д´・ ○]
枚举公比为
p
q
,
(
p
,
q
)
=
1
{p\over q},(p,q)=1
qp,(p,q)=1
枚举项数为t+1,那么我们可以搞出一个形如
a
q
t
.
.
.
a
p
t
aq^t...ap^t
aqt...apt的等比数列
显然这样可以不重不漏
项数为1和2直接算,剩下的部分形如
∑
q
≥
1
∑
p
>
q
∑
t
≥
2
,
p
t
≤
n
⌊
n
p
t
⌋
\sum_{q\ge 1}\sum_{p\gt q}\sum_{t\ge 2,p^t\le n}\lfloor {n\over p^t}\rfloor
q≥1∑p>q∑t≥2,pt≤n∑⌊ptn⌋
后面部分与q无关,所以答案为
∑
p
≥
2
∑
t
≥
2
,
p
t
≤
n
⌊
n
p
t
⌋
φ
(
p
)
\sum_{p\ge2}\sum_{t\ge 2,p^t\le n}\lfloor {n\over p^t}\rfloor\varphi(p)
p≥2∑t≥2,pt≤n∑⌊ptn⌋φ(p)
t>=3可以暴力
t=2可以杜教筛
Rikka with Game
Description
有一个字符串,两个人在玩游戏
每一次每个人可以选择一个位置上的字符shift,或者直接结束游戏
先手希望最小化字典序,后手希望最大化
问最终的字符串
|S|<=100
Solution
字典序考虑前缀
手玩一下发现前缀y两人都不会去动,先手动y后手直接结束,后手动y先手再动变成a
前缀有一个<y先手会直接结束
前缀有一个z那么先手会把它变成a,后手再变成b,先手停
没了
Rikka with Coin
Description
有4种货币,面值为10,20,50,100
现在有n种组合,每种组合的金额为wi,问至少需要携带多少个货币才能支付所有组合
n<=100
Solution
显然10最多1个,20最多4个,50最多1个,先求出这些选多少种的所有方案
枚举每个状态,求出需要多少张100即可
注意细节
Rikka with Travels
Description
给出一棵树,问从中选两条不相交的路径,其长度二元组(l1,l2)的数量
n<=10^5
Solution
考虑断掉一条边,求出两边直径,那么我们有矩形[1,l1]-[1,l2]合法,最后求个并
前面的东西可以换根Dp
Rikka with Stable Marriage
Description
有n个男生,n个女生,你需要给这2n个人配对
定义第i个男生和第pi个女生配对,每个男生女生对都有自己的满意度
定义一种配对方式为合法的当且仅当不存在一对二元组(i,j),满足i相对于pi更喜欢pj且pj相对于j更喜欢i
求满足这个条件下,最大的
∑
i
=
1
n
(
a
i
⊕
b
p
i
)
\sum_{i=1}^{n}(a_i\oplus b_{p_i})
∑i=1n(ai⊕bpi)
n<=10^5
Solution
猜想答案为每次选择最大的一对
a
⊕
b
a\oplus b
a⊕b配对
这个的做法可以对两边都建trie,对于a中的每个点算出其往哪个儿子走可以得到最大值
然后每次删掉一个a中的点就对这条链上的点重新算一次这个值
证明不存在的
Rikka with Traffic Light
没人搞
待填
Rikka with Defensive Line
没人搞
待填
Rikka with Segment Tree
Description
定义F(i,n)表示根节点为长度为n的线段树中[i,i]的深度
求
∑
n
=
L
R
∑
i
=
1
n
F
(
i
,
n
)
∗
i
\sum_{n=L}^{R}\sum_{i=1}^{n}F(i,n)*i
∑n=LR∑i=1nF(i,n)∗i
L<=R<=10^18
Solution
大概是考虑把后面的式子拆开
需要维护
S
(
n
)
=
∑
i
=
1
n
F
(
i
,
n
)
∗
i
,
C
(
n
)
=
∑
i
=
1
n
F
(
i
,
n
)
,
A
n
s
(
n
)
=
∑
i
=
1
n
S
(
i
)
S(n)=\sum_{i=1}^{n}F(i,n)*i,C(n)=\sum_{i=1}^{n}F(i,n),Ans(n)=\sum_{i=1}^{n}S(i)
S(n)=∑i=1nF(i,n)∗i,C(n)=∑i=1nF(i,n),Ans(n)=∑i=1nS(i)
每次都会折半