<span>省选模拟15 题解</span>

A. 倒计时

考虑50%的部分分。

分块来削这个数。

后四位形成一块,预处理出9991~9999在前五位的最大值为0~9情况下分别会削到的值和削的次数。

对于零散的后四位暴力削,这样就可以通过根号预处理,根号削$n$了。

容易发现,对于$n$比较大,我们多分几次块,每次用较小一级的块来预处理大块就行了。

 

B. 旅行路线

容易发现问题可以转化为一棵1为根的树,统计每个点到树上祖先的本质不同子串。

将点到祖先转化为祖先到子孙,于是问题是一个简单的广义后缀自动机。

 

C. 流浪者

最终只关注路径上经过的障碍点个数。

容易发现这个向下取整在不断进行的情况下最多有$log2(s)$种取值。

对于障碍点个数很多(>$log2(s)$),最终的$s$为1。

对于50%可以直接在原网格图上dp。

$dp_{i,j,k}$表示 到$i$行$j$列 已经经过了$k$个障碍点。

特别的$dp_{i,j,25}$(这里我认为25已经大于$log2(s)$)表示到$i$行$j$列 已经经过了不小于$25$个障碍点的方案数。

对于比较大的数据 在原图上dp不可行

但是k比较小,所以将k个障碍点抽离出来

为了方便 如果不存在障碍点(1,1)和障碍点(n,m),加入这两个点

然后考虑从一个障碍点到另一个在它右下角的障碍点的方案数,是一个组合数。

问题在于暴力进行这个dp过程,算得的结果是不准确的。

因为两个障碍点之间可能存在着其他的障碍点,一个方案实际上经过了中间的障碍点但没有统计到。

可以把这样的情况容斥掉。

一个自然的想法是令$dp_{i,j}$表示到第$i$个障碍点,已经经过了至少$j$个障碍点的方案数。

最终得到了$dp_{k}$数组,对这个数组进行二项式反演即可。

但是容易发现,如果使用这种容斥方式。

$dp_{k,i}$需要通过所有$dp_{k,j}(j>i)$来进行容斥,同时对于每个$j$的转移系数是不同的。

这也就导致了无法通过原来的特殊性质(即只考虑比较少个数的障碍点)来进行dp了。

一个解决办法是将最终的容斥提前,改为对每个$dp_{i}$数组进行容斥,使$dp_{i,j}$表示恰好经过$j$个障碍点。

考虑一个非法的方案,一定可以表示为$11111100$,其中一个数字$1$表示经过了一个障碍点并统计到了,$0$则表示经过了但没统计到。

这样的话实际上还对应着一种方案为$11111110$,这样考虑的话使$dp_{i,j}$减去$dp_{i,j+1}$就可以了。

$dp$数组中不统计超过$log2(s)$的方案,最终通过每个点的$dp_{i,log2(s)}$乘组合数即可,实际上直接用总方案数减也可以得到。

 

D. 摆棋子

因为一些特殊的原因,出现了$D$题。

因为一些特殊的原因,这场考试成为了唯一一场赛时超过300分的考试。

然而这是一道原题 土兵占领

通过将摆棋子转化为删棋子,实现跑最大流而得到最小的答案。

全部评论

相关推荐

点赞 评论 收藏
分享
08-24 14:45
河南大学 Java
如图所示,我在大二升大三的暑假拿到了美团的日常实习,这一路走来很不容易,所以想分享一下经验,也算是传承,因为一路走来帮助我的人也有很多。第一😇(学习路线),看黑马的视频只是一个入门,我是一直看完了springcloud。第二😇(项目),项目的话没有好坏,只有新奇与陈旧,新的项目用的人少的往往能达到让面试官眼前一亮的效果,所以没有固定的推荐,但是大家可以努力去多做几个项目,这样技术你都学会了,之后可以根据新的项目进行改造。第三😇(八股文),这个真就是跟着网站上背就行了&nbsp;一定要自己整理一套自己的八股笔记,有自己的思考与理解,我理解之后即使几个月不看也能顺滑的说出来。第四😇(面试注意),面试的时候要体现自己的思考,如果你能说出来一整个问题的逻辑那很好,但是不要着急,先说百分之八十,后百分之二十说是自己思考出来的。第五😇(当你所有的都融会贯通),八股项目相结合,八股与八股相串联,问到你一个简单的问题可以扩展延伸让面试官措不及防,被你控制,这样面试官能够问你不会的问题的概率也会大大下降。等待与努力的过程是无比的焦虑与忐忑,当字节三面挂与快手二面挂的时候我已经开始摆烂了,因为双非的机会真的不多,都没把握到,最后还是美团收留了我,任何人的路径都是不可复制的,任何人的经历也是独一无二的,不要受别人影响,加油做自己。接受大家积极发问,也可以私信我哦。
永泽one:美团官网投的嘛佬,根本约面不了
大厂面试问八股多还是项目...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务