牛客挑战赛39

A - 聚会

容易想到,两个传送门放在不同半轴肯定不如放在同一半轴好,所以其中一个门肯定是放在处的;
为正半轴上的朋友们的坐标,为负半轴上的朋友们的坐标;
为另一个门放在正半轴时,正半轴的朋友全都走到处需要的时间;
为另一个门放在负半轴时,负半轴的朋友全都走到处需要的时间;
那么答案即为

怎么求

考虑二分答案,以正半轴为例,假设为正半轴上距离处最远的朋友的坐标(即):

  • 首先二分得到一个

  • 若对任意,均满足中的至少一个,则

  • 否则

负半轴的做法类似。

Code: here

B - 密码系统

先将复制一遍连在后面得到(),然后用后缀数组求得的sa,基于sa求出后缀的rank。

~的值分组,利用求得的rank找到每组中最大的后缀。

再利用rank找到答案即可。

感觉说的全是废话。

Code: here

C - 牛牛的等差数列

不考虑取模的部分的话,这个题就是一个人尽皆知的线段树模板题。

每个节点的lazy标记存两个值,分别为等差数列的首项和公差,利用等差数列求和公式,就能维护区间和了。

如何解决取模的问题?

  1. 维护时的结果,输出时再模即可。
  2. 因为不取模时最大结果小于,所以直接用int128存,输出时再取模。

Code:here

D - 牛牛的数学题

超级套娃。

首先对做一次子集卷积(FMT或FWT),存到中。

然后对做一次多项式乘法(NTT),存到中。

再对做一次位运算卷积(FWT),存到中。

询问时输出即可。

Code:here

全部评论
为什么写成mid=L+(R-L)>>1;就会TLE 但是改成其他的写法都能过,不是都说位运算反而快吗
点赞 回复 分享
发布于 2020-04-19 03:04

相关推荐

某牛奶:一觉醒来全球程序员能力下降200%,小伙成功scanf惊呆在座个人。
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
Java抽象练习生:教育背景放最前面,不要耍小聪明
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务