【题解】牛客小白月赛12

Nowcoder小白月赛12题解

更新:2019.3.11在本文末尾补充了标程链接~

命题:fzszkl

前言

***和华华是出题人的好朋友,然后他们最近(2019年2月份)互相帮助对方脱单了,只剩下了孤单寂寞的出题人一个人,出了这套题祝他们幸福。

(怎么可能哈哈哈哈哈,出题人当然也是有女朋友的。)

第一题

考虑贪心,将所有区间按照左端点排序,从左往右遍历。用一个变量维护我们当前最远可以够到的右端点,然后枚举左端点不超过右端点+1的所有区间,选择右端点最靠右的一个即可。时间复杂度

第二题

快速幂和快速乘的模板题,时间复杂度

第三题
长得很吓人的送分题,注意到是一个完全积性函数,所以线筛即可。对于素数,直接快速幂。因为素数的个数是级别的,快速幂的复杂度是的,所以总时间复杂度是O(N)。

第四题

N=1时答案显然为1,然后针对每一个N(N>1)推式子:

线筛出欧拉函数以后,直接计算每个d对N的贡献,时间复杂度

(还有一种出题人原创的同复杂度但贼难写的莫比乌斯反演弱智做法,就不献丑了。)

第五题

显然可以二分答案,然后枚举每根木棍判断可以裁剪成几段,根据段数的总和判断是否合法。时间复杂度

第六题

考虑用树状数组暴力维护,单次修改的复杂度为

X越大的时候,复杂度越低,可以直接用树状数组来维护。

X越小的时候,复杂度过高,但是这样的X比较有限,可以开一个桶来维护被修改的总量。

假设界限为S,那么修改复杂度为,询问复杂度为,显然的时候,复杂度最优,为

本题还可以使用定期重构解决,将阈值设为,复杂度一样,实际效率更高。

感谢csyer验题时提出以下做法:

建一个树状数组,第i位记录i的倍数被增加的数的和(只记一次,比如2的倍数就记在2的位置,不需要修改4、6等),设为F_i。将每次询问看成两端前缀和相减,那么我们要求的就是区间[1,X]的答案,显然就是。求值时数论分块,使用树状数组进行区间求和即可。修改复杂度,询问复杂度,因为数论分块和树状数组的复杂度上界比较松,所以效率比较高。

第七题

首先离线操作,建出整棵树的最终状态。对这棵树进行DFS,i号点被搜到的时间记为DFN_i。DFN有一个重要的性质,就是同一棵子树内的节点的DFN总是连续的,所以我们可以用一个线段树按照DFN的顺序来维护所有点的点权。

考虑到一个操作会影响到一个点有以下两个条件:1、***作的是被影响的点的祖先(或它自己);2、加点的时间早于操作的时间。

所以我们执行修改和询问时直接对整棵子树执行,执行加点操作的时候直接将这个点当前的点权**清零**即可。这样可以消除所有早于它出现的操作的影响。因为只有单点询问,所以本题线段树可用差分树状数组代替。时间复杂度

第八题

感谢csyer提供本题以及题解(因为我不会做):

,我们知道

由于,则

这样递归下去,最终可以得到

所以本题就是求,时间复杂度

第九题

因为少了一道图论题,但是出题人图论不好,所以只能随便编了一道tarjan入门题给大家献丑了。

如果删掉某条边后,图仍旧连通,那么这就是一条不必要的边。

反过来说,如果删掉一条边以后,图不连通了,那么这就是一条必要的边。

显然对于一条边,只能是必要或不必要的,所以我们只用求出有几条边是必要的,然后用边的总数去减即可。

必要的边显然就是割边,那我们只用写个tarjan算法求出有几条割边即可。时间复杂度O(N+M)。

第十题

考虑贪心的去匹配,我们希望当前匹配到的位置越靠前越好。所以对于母串每一位都记一下下一次出现某个字符的位置。匹配的时候从第零位(虚根)开始,如果能一直匹配下去就是Yes,否则就是No。这样单次查询的复杂度是的,序列自动机预处理的复杂度是O(26|A|)的。总时间复杂度是(事实上这是一种叫做序列自动机的算法)。

尾声

按照fzsz的习俗,最后祝大家身体健康~

标程链接(不懂怎么搞链接啊,只好放网址了sorry):

A

B

C

D

E

F

G

H

I

J
全部评论
可恶的出题人
点赞 回复 分享
发布于 2019-03-09 22:07
T1 WA了7发,知道数据锅了后一下子A了
点赞 回复 分享
发布于 2019-03-10 06:19
数学题全崩
点赞 回复 分享
发布于 2019-03-09 22:20
哇,为什么第一题算法是么nlongn?看到1<=m<=2*10^5,我连二重 循环都不敢套了
点赞 回复 分享
发布于 2019-03-10 09:31
点赞 回复 分享
发布于 2019-03-09 23:41
orz匡主力
点赞 回复 分享
发布于 2019-03-09 22:44
数论大佬要膜
点赞 回复 分享
发布于 2019-03-09 22:30
欢迎私聊QQ  3152613662
点赞 回复 分享
发布于 2019-03-14 10:27
请问一下D题的莫比乌斯反演的做法是什么呀,想学习一下
点赞 回复 分享
发布于 2019-03-13 12:30
第三题,看不懂2333
点赞 回复 分享
发布于 2019-03-10 21:01
给跪
点赞 回复 分享
发布于 2019-03-10 20:23
最后一题的出题人数据出的也太水了吧,10^12 的复杂度都能过??? 我看了好几份代码,都是纯暴力过的。 只要加一组数据,至少wa掉一半人。 最后给一个Bi的和为10^6次方根本没用, 并没有减少最坏情况下的复杂度。 被坑死了。
点赞 回复 分享
发布于 2019-03-10 09:51

相关推荐

避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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