T1:五子棋(fir)
题目冗长,大概就是下类似于五子棋的
n
n
n子棋,然后有提子操作,让对面提子即为不合法,判断输赢或是否合法
大力模拟即可
T2:迷宫(maze)
迷宫可以抽象成一个矩阵,小 K 要从
(
1
,
1
)
(1,1)
(1,1)走到
(
N
,
M
)
(N,M)
(N,M),而且只能往下和往右走,即小 K 只能从
(
X
,
Y
)
(X,Y)
(X,Y)走到
(
X
,
Y
+
1
)
(X,Y+1)
(X,Y+1)和
(
X
+
1
,
Y
)
(X+1,Y)
(X+1,Y)。小 K 不能走出迷宫(即
X
>
N
X>N
X>N 或
Y
>
M
Y>M
Y>M)。当然,迷宫有一些格子是被堵住的,小 K 不能从这些格子经过。 每个没被堵住的格子都有一个权值,小 K 十分喜欢 X 这个数字和异或这个运算。所以他希望所有他经过的格子的异或和为 X。现在小 K 想知道他有多少种走法,听说你是一位大佬 蒟蒻 ,于是他向你求助。
N
,
M
<
=
20
N,M<=20
N,M<=20,
A
i
<
=
1
e
9
Ai<=1e9
Ai<=1e9
考场智障没有想到折半搜索
大概就是分别从起点和终点各搜索一半,然后统计答案
T3:雪人(snowman)
WZY 堆了
N
N
N 个雪人,每个雪人都有一个可爱度$ Xi$,WZY 认为两串雪人 $a1,a2…an $与
b
1
,
b
2
…
b
m
b1,b2…bm
b1,b2…bm 和谐当且仅
1.
n
=
m
n=m
n=m
2.
a
1
−
b
1
=
a
2
−
b
2
=
…
=
a
n
−
b
n
a1-b1=a2-b2=…=an-bn
a1−b1=a2−b2=…=an−bn
WZY 现在要从一堆雪人中选择两串雪人
A
=
[
l
1
,
r
1
]
A=[l1,r1]
A=[l1,r1],
B
=
[
l
2
,
r
2
]
B=[l2,r2]
B=[l2,r2](两串可以重叠,即若
l
1
≤
l
2
l1≤l2
l1≤l2,
l
2
l2
l2 可以小于等于
r
1
r1
r1),使得
A
A
A 和
B
B
B 和谐,现在 WZY 想知道对于所有的方案中,
min
(
∣
l
1
−
l
2
∣
,
l
e
n
(
A
)
\min(|l1-l2|,len(A)
min(∣l1−l2∣,len(A))的最大值。
l
e
n
(
A
)
len(A)
len(A)为 A 中所含雪人的个数。因为 WZY 还要准备 AK JSOI 2019,所以他把这个问题交给了你。
n
<
=
5
e
5
n<=5e5
n<=5e5
将式子变形能得到
a
1
−
a
2
=
b
1
−
b
2
a1-a2=b1-b2
a1−a2=b1−b2
显然这是可以用预处理的
判段是否相等只需要hash起来就可以了
枚举起点二分长度就得到了一个
O
(
n
2
log
n
)
O(n^2\log n)
O(n2logn)的算法
发现对于一个长度
l
e
n
len
len,最多就只有
n
−
l
e
n
+
2
n-len+2
n−len+2个串
那么就将这些串提出来,排个序,相邻的比较
∣
l
1
−
l
2
∣
|l1-l2|
∣l1−l2∣是否大于长度就可以了
时间效率
O
(
n
log
2
n
)
O(n \log^2 n)
O(nlog2n)
卡常,用hash_table(虽然我卡过去了 ),或者正解SAM