比赛传送门
A
发现就是求
min
{
[
n
−
d
x
−
5
e
y
≥
0
]
n
−
d
x
−
5
e
y
}
\min\{[n-d\ x-5e\ y\ge0]n-d\ x-5e\ y\}
min{[n−d x−5e y≥0]n−d x−5e y}
考虑到
n
n
n 很小于是可以暴力枚举
CODE
B
题意读错调了一年
n
m
s
l
nmsl
nmsl
A
n
s
=
∑
i
≤
a
j
≤
b
i
+
j
=
=
n
1
Ans=\sum\limits_{i\le a\ j\le b\ i+j==n}1
Ans=i≤a j≤b i+j==n∑1
CODE
C
随便写个栈维护一下左右括号就能判断合法性
CODE
D
考虑到答案
≤
2
\le2
≤2
于是特判
0
0
0
然后做个傻子
d
p
dp
dp 判割点 ,这个可以这样判:
(
1
,
1
)
→
(
i
,
j
)
方
案
数
∗
(
i
,
j
)
→
(
n
,
m
)
方
案
数
=
(
1
,
1
)
→
(
n
,
m
)
方
案
数
(1,1)\rightarrow(i,j)方案数*(i,j)\rightarrow(n,m)方案数=(1,1)\rightarrow(n,m)方案数
(1,1)→(i,j)方案数∗(i,j)→(n,m)方案数=(1,1)→(n,m)方案数说明这个
(
i
,
j
)
(i,j)
(i,j) 是割点
然后可以多取两个模数防止被卡
然后我个智障随机乱按了两个2e9的模数家反函数爆int了还能pp
然后我个智障随机乱按了两个2e9的模数家反函数爆int了还能pp
然后我个智障随机乱按了两个2e9的模数家反函数爆int了还能pp
CODE
E
一道比较傻的构造
考虑把奇数搞成一条链,先不确定点标号顺序,然后把所有点对按照
d
i
s
dis
dis 从大到小排序,一对对加进去,这样满足了
d
i
s
t
dist
dist 的单调性就能利用奇数
n
n
n 个点的链随便构造了
CODE
F
简单构造
考虑到下面这个贪心一定是对的:
我们先把
a
,
b
a,b
a,b 两个数组从小到大排序
A
n
s
=
min
Δ
{
∑
i
=
1
n
d
i
s
t
(
a
i
,
b
(
i
+
Δ
)
%
n
)
}
Ans=\min\limits_{\Delta}\{\sum\limits_{i=1}^ndist(a_i,b_{(i+\Delta)\%n})\}
Ans=Δmin{i=1∑ndist(ai,b(i+Δ)%n)}
其它情况可以发现把逆序交换会更优
然后考虑怎么维护这个玩意儿,我们把
a
,
b
a,b
a,b 两个数组的贡献分开算:
记
b
i
b_i
bi 为加上偏移量之后的
b
b
b 数组第
i
i
i 个的值,有如下四种情况:
- a i ≤ b i , b i − a i ≤ a i + m − b i a_i\le b_i,b_i-a_i\le a_i+m-b_i ai≤bi,bi−ai≤ai+m−bi ,此时 a i a_i ai 贡献为 − a i -a_i −ai , b i b_i bi 贡献为 b i b_i bi
- a i ≤ b i , b i − a i > a i + m − b i a_i\le b_i,b_i-a_i>a_i+m-b_i ai≤bi,bi−ai>ai+m−bi ,此时 a i a_i ai 贡献为 a i + m a_i+m ai+m , b i b_i bi 贡献为 − b i -b_i −bi
- a i > b i , a i − b i ≤ b i + m − a i a_i>b_i,a_i-b_i\le b_i+m-a_i ai>bi,ai−bi≤bi+m−ai ,此时 a i a_i ai 贡献为 a i a_i ai , b i b_i bi 贡献为 − b i -b_i −bi
- a i > b i , a i − b i > b i + m − a i a_i>b_i,a_i-b_i>b_i+m-a_i ai>bi,ai−bi>bi+m−ai ,此时 a i a_i ai 贡献为 − a i -a_i −ai , b i b_i bi 贡献为 b i + m b_i+m bi+m
然后发现对于固定的
a
i
a_i
ai ,满足四种限制的
b
b
b 的位置都是连续的
并且对于固定的
b
i
b_i
bi ,满足四种限制的
a
a
a 的位置都是连续的
这样可以利用下标关系用差分来更新分别更新几段
Δ
\Delta
Δ 的和
CODE
G
我们对每一行搞一个
b
i
t
s
e
t
bitset
bitset ,记为
v
a
l
i
val_i
vali
考虑当
∃
a
,
b
s
.
t
.
(
v
a
l
i
∣
v
a
l
j
)
̸
=
v
a
l
i
&
&
(
v
a
l
i
∣
v
a
l
j
)
̸
=
v
a
l
j
\exists a,b\ s.t.\ (val_i|val_j)\not=val_i\&\&(val_i|val_j)\not=val_j
∃a,b s.t. (vali∣valj)̸=vali&&(vali∣valj)̸=valj
这个东西怎么维护呢?
发现有传递性,即如果
v
a
l
a
∣
v
a
l
b
=
v
a
l
b
,
v
a
l
b
∣
v
a
l
c
=
v
a
l
c
⇒
v
a
l
a
∣
v
a
l
c
=
v
a
l
c
val_a|val_b=val_b,val_b|val_c=val_c\Rightarrow val_a|val_c=val_c
vala∣valb=valb,valb∣valc=valc⇒vala∣valc=valc
于是只要按照某种偏序关系排序就能判出有没有合法答案存在,考虑到
v
a
l
a
∣
v
a
l
b
=
v
a
l
b
val_a|val_b=val_b
vala∣valb=valb 有一个充要条件是
v
a
l
a
val_a
vala 中
1
1
1 的个数不超过
v
a
l
b
val_b
valb 中
1
1
1 的个数,于是用一个
s
e
t
set
set 把每一行按照里面
1
1
1 的个数排序即可维护所有行的包含关系
CODE
H
先判掉二分图染色的情况
然后把直径找出来,将其从一端开始按照
1
,
2
,
3
,
.
.
.
,
k
,
1
,
2
,
3
,
.
.
.
,
k
1,2,3,...,k,1,2,3,...,k
1,2,3,...,k,1,2,3,...,k 的顺序染色,然后对于直径的其余子树的最深点我们进行如下判断:
如果它到直径两端的距离均
<
k
<k
<k ,那么继续按照父亲传下来的顺序染色即可
如果它到直径两端的距离均
≥
k
\ge k
≥k ,那么一定非法
否则一定可以合法构造方案,考虑按照距离更大的一端的顺序染色
即如果从该子树最深点到根距离更远,我们按照
c
o
l
u
r
i
=
c
o
l
o
r
f
a
+
1
colur_i=color_{fa}+1
coluri=colorfa+1 的顺序染色,否则按照
c
o
l
o
r
i
=
c
o
l
o
r
f
a
−
1
color_i=color_{fa}-1
colori=colorfa−1 的顺序染色,这里的加减法均对
k
k
k 进行取模
CODE