Noip 模拟 8 2018/10/25

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

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

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>NX>NX>NY>MY>MY>M)。当然,迷宫有一些格子是被堵住的,小 K 不能从这些格子经过。 每个没被堵住的格子都有一个权值,小 K 十分喜欢 X 这个数字和异或这个运算。所以他希望所有他经过的格子的异或和为 X。现在小 K 想知道他有多少种走法,听说你是一位大佬 蒟蒻 ,于是他向你求助。
N,M&lt;=20N,M&lt;=20N,M<=20,Ai&lt;=1e9Ai&lt;=1e9Ai<=1e9
考场智障没有想到折半搜索
大概就是分别从起点和终点各搜索一半,然后统计答案

T3:雪人(snowman)
WZY 堆了 NNN 个雪人,每个雪人都有一个可爱度$ Xi$,WZY 认为两串雪人 $a1,a2…an $与 b1,b2…bmb1,b2…bmb1,b2bm 和谐当且仅
1.n=mn=mn=m
2.a1−b1=a2−b2=…=an−bna1-b1=a2-b2=…=an-bna1b1=a2b2==anbn
WZY 现在要从一堆雪人中选择两串雪人A=[l1,r1]A=[l1,r1]A=[l1,r1],B=[l2,r2]B=[l2,r2]B=[l2,r2](两串可以重叠,即若l1≤l2l1≤l2l1l2l2l2l2 可以小于等于r1r1r1),使得 AAABBB 和谐,现在 WZY 想知道对于所有的方案中,min⁡(∣l1−l2∣,len(A)\min(|l1-l2|,len(A)minl1l2,len(A))的最大值。 len(A)len(A)lenA为 A 中所含雪人的个数。因为 WZY 还要准备 AK JSOI 2019,所以他把这个问题交给了你。n&lt;=5e5n&lt;=5e5n<=5e5

将式子变形能得到a1−a2=b1−b2a1-a2=b1-b2a1a2=b1b2
显然这是可以用预处理的
判段是否相等只需要hash起来就可以了
枚举起点二分长度就得到了一个O(n2log⁡n)O(n^2\log n)O(n2logn)的算法
发现对于一个长度lenlenlen,最多就只有n−len+2n-len+2nlen+2个串
那么就将这些串提出来,排个序,相邻的比较∣l1−l2∣|l1-l2|l1l2是否大于长度就可以了
时间效率O(nlog⁡2n)O(n \log^2 n)O(nlog2n)
卡常,用hash_table(虽然我卡过去了 ),或者正解SAM

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值