2019.07.09【NOIP提高组】模拟 A 组

博客分享了比赛中三道题的解题情况。T1可用kmp+暴力匹配,正解是二分答案匹配;T2 dp式可用线段树求解,还可用cdq分治等算法;T3是NIM问题,数据水时可暴力枚举。最后总结比赛要先确认算法可行性,要熟悉数据结构。

今天的比赛又做得不好。

T1:这题各种暴力/水法都能水过。

我是用kmp+暴力匹配。而正解是先二分答案mid,然后枚举A的前mid个字符在B串中匹配的起始位置i,接着在二分求出从i开始做多能匹配的A的前缀,然后接下来看一看后面的部分是否能匹配上就好了。

 

T2:这一题其实不难,但是我没有想到正解。

dp式很好推,也很容易发现这个dp式可以用线段树来求,关键是如何维护线段树。其实直接用线段树合并+动态开点就好了。

这题还有很多解法,这题的本质就是一个多位偏序问题(我们可以把更新条件看成顺序),cdq分治、扫描线等算法都可以做。

 

总结:1、比赛时要想清楚一个算法是否可行才开始打,否则会耗费很多时间和精力。

2、我对部分数据结构还是不太熟悉。当要维护很多棵线段树时可以考虑动态开点和线段树合并。而想这题一样要满足很多个大小关系才能更新的一般是cdq分治。

 

T3:这题其实就是一个NIM问题。而NIM问题先手必胜的条件就是所有堆的石子个数的异或值不为0,为0则必败。

那么问题就转换成了求最大的x,使s^(v-x)=0。其中s=a[l]^a[l+1]...^a[r-1],v=a[r]。因为s^(v-x)=0,所以s=v-x,即x=v-s。

因为这题数据比较水,所以暴力枚举就好了。正解我还不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值