前言
话说第一个乱刷计划很顺利地完成了
感觉写成一个题表的形式还是很支持的
于是我决定再开一个。。
打算
依然是可以做自己没做过的题,也可以复习做过的。同时尽量学一些自己不会的吧
乱刷计划2
3158: 千钧一发
很简单的网络流吧。。以前一直以为很难
其实不难发现,偶+偶,和奇+奇都是合法的
因此你可以建立一个二分图,最小割就可以了
要注意的是,平方的时候会爆int
1449: [JSOI2009]球队收益
其实和之前剪刀石头布那道题是差不多的
但是这题多了一个东西,就是输了也有奖
那么这里就用到一个小技巧,就是先假设他全部输掉
然后慢慢赢回来,代价就减去输的那个,这样就和之前那题一样了
然后一开始我吧一开始win的也当做输掉,然后必须要他赢回来,但是发现这样非常慢。。T掉了,改了之后才A。。
2560: 串珠子
先是看错了一发题目,以为要是一棵树。。
然后很高兴地打了一个矩阵树定理。。还觉得数据才16,特别水。。然后发现死活过不了样例,才发现是连通图QAQ
然后就考虑容斥
用总的减去不合法的
表示两个状态
f[i]
f
[
i
]
,
g[j]
g
[
j
]
第一个是里面的是一定合法的,g是不合法的
然后枚举子集转移
怎么知道他不合法呢?
固定一个点,让他在其中一个块里面,这个状态为
f[a]
f
[
a
]
,然后不在另外一个里面,就是
g[b]
g
[
b
]
,两个乘起来即可
3240: [Noi2013]矩阵游戏
这题的话,
n,m
n
,
m
给的是指数的形式,显然不是想让你一个矩乘就过了。。那么他应该给个
1018
10
18
就差不多了
于是我们要考虑优化
还是从矩阵出发
我们知道,行的矩阵大概是这样的:
a0b1
a
b
0
1
在若干次乘法之后,会变成这样
an0b(a+a2+a3+a4+.....+an)1
a
n
b
(
a
+
a
2
+
a
3
+
a
4
+
.
.
.
.
.
+
a
n
)
0
1
显然,后面的是一个等比数列
然后你会发现,最后都是乘方的形式
这让我们想起了费马小定理
虽然他是一个矩阵,但是我们从他的数的构成可看出,他也是可以用费马小定理来优化的
另外的矩阵也是同理,于是就成功吧时间复杂度降下来了
有一个小问题,就是当a=1的时候,他的形式是与膜数不互质了,那么费马小定理就不成立了,那怎么办呢?我们发现,如果这样的话,就退化成一个等差数列的形式了,于是其实他每隔
mod
m
o
d
个也是一样的,于是将
mod−1
m
o
d
−
1
次幂调为
mod
m
o
d
即可
4865: [Ynoi2017]由乃运椰子
明显地,方案肯定是放入单调上升的序列
那么问题就是问你有多少个单调上升的序列。。
那就是区间众数啊。。
但是考虑到空间只给了10M
所以传统的可能不太行
考虑压空间
1.调节块的大小,开
shortint
s
h
o
r
t
i
n
t
2.考虑到每个数,至少会有一次,所以全部如果只出现一次的数,都删掉好了。。其实出现的第一次都删掉也可以,然后最后答案+1就可以了
考虑到代码恶心,所以不想打了。。精神AC
QAQ
2440: [中山市选2011]完全平方数
很明显,是要二分答案
然后算里面有多少个
然后很明显,不喜欢的数是有一个质数出现次数为2次货以上,于是随便容斥一下就好了。发现容斥的系数刚好满足莫比乌斯函数,于是就可以了。。
发现如果答案太大,莫比乌斯函数不好预处理
猜一手结论,答案不会很大,打表发现,似乎不会超过
2∗n
2
∗
n
,然后就没有了
2301: [HAOI2011]Problem b
莫比乌斯反演的应用啊!经典入门题啊!
不难发现,问题可以变成询问
1<=x<=n且1<=y<=m且(x,y)=k
1
<=
x
<=
n
且
1
<=
y
<=
m
且
(
x
,
y
)
=
k
把k提出来,可以变成
1<=x<=⌊n/k⌋且1<=y<=⌊m/k⌋且(x,y)=1
1
<=
x
<=
⌊
n
/
k
⌋
且
1
<=
y
<=
⌊
m
/
k
⌋
且
(
x
,
y
)
=
1
即求
∑⌊n/k⌋x=1∑⌊m/k⌋y=1∑d|(x,y)μ(d)
∑
x
=
1
⌊
n
/
k
⌋
∑
y
=
1
⌊
m
/
k
⌋
∑
d
|
(
x
,
y
)
μ
(
d
)
吧
μ
μ
提出去就可以了,然后可以分块优化
不想打公式了
2820: YY的GCD
很常用的一个手法啊,当要枚举两个数的时候,不妨枚举他们的积,然后就可以吧复杂度压成 O(n−−√) O ( n ) 了。公式不想打了。。
2226: [Spoj 5971] LCMSum
还不错的一个题啊!
首先我们要推出
考虑枚举 gcd(i,n)=d g c d ( i , n ) = d
则有
其中 F(n) F ( n ) 为一个数n小于等于他且和他互质的和
1. F(n)=phi(n)∗n/2 F ( n ) = p h i ( n ) ∗ n / 2
证明:
我们可以用类似等差数列求和的方式来证明
考虑到一个数i,如果 (n,i)=1 ( n , i ) = 1 ,则肯定有 (n−i,i)=1 ( n − i , i ) = 1 ,因此,我们可以吧 i i 和分到一组,得到上式
2.莫比乌斯运用
后面那个可以用等差数列求和
但是每一次都这么求会很慢,于是我们可以为 F F 和都进行预处理,枚举他们的因数,扫过去,就可以 nlogn n l o g n 了
2154: Crash的数字表格
有两个方法,一个是
O(n−−√)
O
(
n
)
的,一个是
O(n)
O
(
n
)
的
先介绍一个
O(n)
O
(
n
)
的吧
然后我们考虑怎求解
给定一个d,如果我们可以求出
那么我们就可以用容斥可得
系数刚刚好就是 μ(d) μ ( d )
然后考虑怎么求出 F(n,m,d) F ( n , m , d )
不难发现
然后对于F吧d提出来即可,然后我们就可以得到一个 O(n) O ( n ) 的做法了
一个询问
n−−√
n
的做法
不想写了。。再推一下式子,乱搞一下就可以了
3529: [Sdoi2014]数表
F[i] F [ i ] 表示是约数和,然后考虑到只有 F[i]≥a F [ i ] ≥ a 的是有用的,于是把 F[i] F [ i ] 按值拍个序,吧 a a 也排个序,单调加入就好了
3994: [SDOI2015]约数个数和
很简单的一个题啊
即
吧 μ μ 提前就出来了,有一个东西要 n−−√ n 的时间复杂度预处理一下,然后就没有了
4176: Lucas的数论
上面一题的进化版
但其实做法是一样的,不过加了个杜教筛,然后后面分块可以暴力算
栋老师给我证明了是
n34
n
3
4
的,然而我不是特别懂。。反正可以过就是了
2553: [BeiJing2011]禁忌
今天感觉有点感冒,效率很低啊。。白天几乎就处于挂机状态,感觉药丸了
这题其实不怎么难。。
就建立一下AC自动机,然后记录一个某个节点到某个节点的概率,然后矩阵快速幂转移即可
3244: [Noi2013]树的计数
这题还是很棒的一个题啊,玩了我一个晚上
当然,可能有玩错的,如果有,最好在评论里面纠正一下吧
但我也没有证明有有其他情况使得下面三种情况出现
我们先用bfs序把dfs序重新标号
我们设新的编号
i
i
,在dfs序里面的排名是
然后我们就顺着编号走,这样就相当于高度从大到小走下来了
考虑三种情况:
1.第i号点不可以和第i-1号点在同一层,这样的话,
ans++
a
n
s
+
+
2.第i号点可以(也可不在)和第i-1号点在同一层,这样的话,
ans=ans+0.5
a
n
s
=
a
n
s
+
0.5
3.如果一定要在同一层,那么ans不变
然后我们考虑什么时候会有第一种情况,那就是当在
id[i]<id[i−1]
i
d
[
i
]
<
i
d
[
i
−
1
]
,这个很显然把
然后考虑什么时候会是第二个情况,这样就是说,
id[i]=id[i−1]
i
d
[
i
]
=
i
d
[
i
−
1
]
,并且考虑到无论i和i-1处于什么位置关系,整个序列的bfs和dfs序都不会改变。这就说明,剩下的点都在i这颗子树里面,因为bfs序随着编号变大,深度肯定变大。然后如果有的点与它在同一层里面,那么它的改变,肯定是会使得别的改变的。于是我们考虑怎么知道剩下的点是不是都是他的子树,我们考虑到,一颗子树的dfs序是连续的,所以剩下的节点也是连续的,通过这个判断就可以了
1001: [BeiJing2006]狼抓兔子
直接建立对偶图跑一跑就可以了
4423: [AMPPZ2013]Bytehattan
直接建立对偶图跑一跑就可以了
2007: [Noi2010]海拔
仔细想想,其实和1001是一样的
2151: 种树
复习了一下
一个可以后悔的贪心啊
这次是自己想出来了,可能是以前做过的缘故吧