Noip 模拟 8 2018/10/25

本文解析了三道算法竞赛题目,包括五子棋博弈策略、迷宫路径计数及雪人序列匹配问题,提供了详细解题思路与优化算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1:五子棋(fir)
题目冗长,大概就是下类似于五子棋的 n n n子棋,然后有提子操作,让对面提子即为不合法,判断输赢或是否合法
大力模拟即可

T2:迷宫(maze)
迷宫可以抽象成一个矩阵,小 K 要从 ( 1 , 1 ) (1,1) 11走到 ( N , M ) (N,M) NM,而且只能往下和往右走,即小 K 只能从 ( X , Y ) (X,Y) XY走到 ( X , Y + 1 ) (X,Y+1) XY+1 ( X + 1 , Y ) (X+1,Y) X+1Y。小 K 不能走出迷宫(即 X > N X>N X>N Y > M Y>M Y>M)。当然,迷宫有一些格子是被堵住的,小 K 不能从这些格子经过。 每个没被堵住的格子都有一个权值,小 K 十分喜欢 X 这个数字和异或这个运算。所以他希望所有他经过的格子的异或和为 X。现在小 K 想知道他有多少种走法,听说你是一位大佬 蒟蒻 ,于是他向你求助。
N , M &lt; = 20 N,M&lt;=20 N,M<=20, A i &lt; = 1 e 9 Ai&lt;=1e9 Ai<=1e9
考场智障没有想到折半搜索
大概就是分别从起点和终点各搜索一半,然后统计答案

T3:雪人(snowman)
WZY 堆了 N N N 个雪人,每个雪人都有一个可爱度$ Xi$,WZY 认为两串雪人 $a1,a2…an $与 b 1 , b 2 … b m b1,b2…bm b1,b2bm 和谐当且仅
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 a1b1=a2b2==anbn
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 l1l2 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) minl1l2,len(A))的最大值。 l e n ( A ) len(A) lenA为 A 中所含雪人的个数。因为 WZY 还要准备 AK JSOI 2019,所以他把这个问题交给了你。 n &lt; = 5 e 5 n&lt;=5e5 n<=5e5

将式子变形能得到 a 1 − a 2 = b 1 − b 2 a1-a2=b1-b2 a1a2=b1b2
显然这是可以用预处理的
判段是否相等只需要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 nlen+2个串
那么就将这些串提出来,排个序,相邻的比较 ∣ l 1 − l 2 ∣ |l1-l2| l1l2是否大于长度就可以了
时间效率 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)
卡常,用hash_table(虽然我卡过去了 ),或者正解SAM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值