第256章 扩展欧几里得算法,以及增强线段树

“七八点钟?没问题,我们都不见得能玩到那么晚呢。”熊磊率先表示赞同。

朱达昌也点了点头:“玩得太晚了,两位老师也会不放心。”

江寒笑问:“看你们下午都这么有时间,意思是今天不往回走了呗?”

朱达昌回答:“高老师预定了火车卧铺,夜里10点的始发车。”

李山河也说:“要等8、9个小时的车,这么长时间,不玩点什么也太无聊了。”

熊磊的情况有所不同,他解释说:“我爸爸的车实在不能凑合了,准备买台全新的高尔夫6,明天就去4s店提车,所以只能晚一天回去。”

江寒了然一笑,熊爸爸那辆二手车,动不动就趴窝,的确早该换换了。

想了想,对李山河、朱达昌说:“我不一定能送你们上车,今晚我可能就得往回走了。”

“这么急吗?好不容易来一趟松江,不好好玩一玩?”李山河问。

江寒坦然点头,说:“我是坐方便车来的,别人什么时候往回走,我就什么时候跟回去,总不能让别人将就我吧?”

其实要什么时候回去,还不是他一句话的事情?

但夏雨菲明天有课……

“诶?如果唱k的话,能不能让夏雨菲同学也来呀?”朱达昌突发奇想。

“就是的,江寒,你和夏雨菲好像挺熟悉的,帮忙邀请一下呗。”李山河也力促。

江寒一阵无语。

别说,还真可以考虑一下。

小媳妇这次出来,光跟着自己跑前跑后了,也没玩好……

也不知道她有没有意愿出来散散心?

江寒想了想,没把话说死:“好吧,比完赛我打电话问一声,能不能约出来,我可不敢保证哦。”

听了江寒的话,其他人都十分期待,毕竟夏雨菲不光长得好看,在学校里也是有名的唱歌好听。

但其实,江寒已经决定,顺便也叫苗清澜和关浩一声,愿意来的话,就一起热闹热闹。

而且,出门在外的,指导教师们也不可能彻底放手,肯定都会跟着。

这样的话,就不太好去一些环境太复杂的场所了……

时间将到8点,赛场封锁就被解除,选手们再次鱼贯入场。

其他流程和昨天大同小异。

8点30分,Day2比赛正式开始。

江寒拿到题之后,习惯性地全部浏览了一遍,然后从头开始做。

今天的三道题,难度比Day1高多了。

但说实话,并没有超过他的预计,都属于那种稍微花点心思就能解决的类型。

第一题是同余方程。

【问题描述】:求关于x的同余方程ax≡1(mod b)的最小正整数解。

输入数据是两个正整数a和b,要求输出方程的最小正整数解x0。

比如:输入3和10,输出就是7。

数据范围:

对于40%的数据,2≤b≤1000;

对于60%的数据,2≤b≤50000000;

对于100%的数据,2≤a≤2000000000,2≤b≤2000000000;

输入的数据保证一定有解。

江寒一打眼就看出来了,这是一道数论题。

只要明白同余方程是怎么回事,就很容易理清思路。

原式可理解为ax mod b = 1,即ax的乘积除以b,余数为1。

所以,对于任意给定的a、b,可以用穷举法暴力搜索,从x0=1开始,每次递增1,很容易就能找出一个最小的x,使得方程成立。

但因为a、b的取值范围特别巨大,这样做,会导致至少4个点TLE(Time Limit Exceeded,即时间超限)。

要想得到全部分数,必须想办法缩减运算时间。

如果能找到这个算式中隐藏的规律,问题自然迎刃而解。

当然,这需要拥有一点数论功底,才能办得到。

江寒先观察了一下方程。

原式等价于 ax-kb=1,因为k值可以为负数,所以又可以看做ax+by=1。

显而易见,a与b一定互质,所以原式可转化为 ax+by=gcd(a,b),这里gcd表示两个整数的最大公约数……

咦?

这不就是扩展欧几里得的标准形式吗?

这样就简单了啊!

欧几里得算法也叫辗转相除法,用于求最大公约数,属于小学奥数常见内容。

有个基本性质:gcd(a,b)=gcd(b,a%b)。

而扩展欧几里德算法,则用来已知a, b,求解方程ax+by = gcd(a, b)的解。

根据数论中的相关定理,解是一定存在的。

所以,这道题只要用上扩展欧几里德算法,就能很轻松找到一组x0、y0,使得等式成立。

接下来,江寒根据算法,只花了五分钟,就编写出了对应的代码。

其中的递归函数exgcd(),就是扩展欧几里德算法的一种实现。

用上了这种方法之后,编程难度大大降低,一共只用了10来行代码,就完成了解答。

然后一调试……

江寒就无语地发现,求解出来的x0,居然有时候会出现负值。

这就不符合题意了。

那么……为什么会产生这种情况呢?

江寒想了想,拿过一张草稿纸,简单地推理了一下。

在数学上,ax = 1 (mod b)等价于ax % b = 1,又等价于ax + by = 1。

当用扩展欧几里德算法,求出它的一组解x0和y0时,可得ax0 + by0 = 1。

那么只要在方程左边加上一个kab,再减去一个kab,合并同类项可得:

a(x0 + kb)+ b (y0 - ka)= 1。

x=x0 + kb,y=y0 - ka就是方程的通解,k可以为负数、0、或正数。

这里我们只关心x的取值,于是接下来,只要求出等于x0 + kb的最小正整数,就可以了。

为什么给x0 加上一个 kb,而不是某个比b小的数与k的乘积?

很简单,如果那么做,就找不到能使等式成立的y了……

因为x0有可能为负数,所以要分两种情况讨论。

当x0 大于0 时,显而易见,x0 % b 也大于0,所以最小的正整数x就是x0 % b本身。

而当x0 ≤ 0时,x0 % b也必然≤ 0,因为-x0 % b-必定小于b,所以只需要在x0 % b的结果上,再加上一个b,就可以得到最小的正整数解了。

推演到这里,结论就很明确了。

江寒马上将代码稍加修改,再次一调试,这次就顺利通过了。

啧,出题的人挺阴险的嘛。

如果生搬硬套扩展欧氏算法,没准一不小心就会掉进坑里去……

虽然这么一个小坑,应该也困不住太多人就是了。

第一题搞定之后,江寒就开始思考下一道题。

第二题:借教室。

【问题描述】:……

(太长,省略。)

这道题和Day1的第三题差不多,都是那种表述啰嗦得要死,但只要看明白题意,就会觉得异常简单的题型。

江寒直觉可以用线段树来弄。

事实上,应该也是行得通的。

但一般说来,线段树中的pushdown常数都特别巨大,很容易溢出。

所以,如果没什么特别的优化手段,最多通过70%的数据校验点,也就差不多达到极限了。

要想过掉100%的校验点,达到All Clear的境界,就必须使用二分答案法,再加上前缀和差分……

正打算换个思路来破题,江寒忽然想起了什么,拿起草稿纸一阵推演。

五分钟后,他长出了一口气,然后开始画流程、写伪代码。

他没有改变算法,仍然使用了线段树,只不过在标准的算法中,稍微做了一点小改进。

办法很简单,就是将线段树的标记固定化了,在区间完全重合的时候,只是打上修改标记,而不去pushdown标记。

在查询的时候,顺便将每个位置标记上,要算的值都放在下一层递归里,这样就大大优化了线段树的pushdown常数。

标记的删除非常方便,要把一个区间改回去,只需要把最外层的几个小区间标记置0就行。

这么一改进,就能大大减少运算量,从而有很大的机会通过全部数据了。

江寒写完增强线段树算法,又编写了一段测试代码,用各种极限值去测试。

结果非常喜人,在100%的数据输入区间,都能轻松在1秒内得到答案。

第二题就此搞定。

时间到此才过去1个小时20分钟,还剩下两个多小时。

那么,接下来就一鼓作气,搞定最后一题。

第319章 那年,那个女孩儿第52章 “感知机”的初次实战第312章 阱中有坑,坑里有钉第303章 你以为就这样而已?第223章 她不会玩真的吧?第371章 莫非换了个女朋友?第342章 蛇皮走位,初现锋芒第421章 身世大白第330章 小孔成像和PNP问题第204章 是男人就喂饱她第426章 坦白从宽,回家过节。第13章 “感知机”和“M-P模型”第296章 搅动风云第428章 Hack Me的奖品第11章 像我这么专一第223章 她不会玩真的吧?第274章 申请PCT国际专利第258章 学霸的画风,都是这么清奇的吗?第111章 虚拟空间,开启!第212章 他和夏总到底什么关系?第26章 周一凡的震惊第366章 微服私访?第83章 发卡第416章 有困难找组织第176章 现学现卖第400章 不可逾越的高山第166章 意外的变化第46章 月考开始第192章 许文强和冯程程第179章 马尔可夫随机场第157章 找个清静的地方第90章 衣进爵的战役第239章 没有对比就没有伤害第7章 所谓“取整”,就是……第16章 倔强的夏雨菲第67章 异或问题第80章 碰碰船和真人CS第306章 就剩这么几个了第392章 深度卷积神经网络第85章 吊桥效应第9章 实名震惊第399章 此一时,彼一时第288章 合理避税第426章 坦白从宽,回家过节。第250章 幸亏有双保险第14章 别带坏了江寒第270章 夏如冰的遭遇第129章 两道试题第51章 任务分析第428章 Hack Me的奖品第401章 有种奇遇叫顿悟第374章 手工打造LED显示器第24章 投稿AMC第118章 《如何高效判断数据是否线性可分》第177章 口是心非的非第201章 组内学习竞赛请假,存稿丢失一章,正在想办法重写第303章 你以为就这样而已?第78章 土豆和男朋友第4章 万界爬虫系统第350章 男生不准进去的地方第43章 写字机器人第408章 初入燕园第291章 惊动了各路神仙第382章 电动车和机械臂第272章 冤死骆驼的最后一根稻草第175章 一亿一个第193章 这也太考验人了吧?第352章 有了一个小助手第141章 金装四大才子第65章 论文过审第154章 脑力提升的副作用第99章 老江很忙第159章 想怎么看,就怎么看?第329章 抛弃框架,从零开始造轮子第154章 脑力提升的副作用第34章 游戏发布第258章 学霸的画风,都是这么清奇的吗?第183章 成功的路上没有侥幸第376章 很像一台成熟的计算机了第41章 要是不帅不酷呢?第299章 胆大妄为,实力恐怖第39章 这可能是个误会第109章 不擅长的事情第114章 收音机,以及1:10?第249章 胸有成竹,根本不慌第72章 玩不起第136章 打造算术逻辑单元第276章 丢1分和拿满分,哪个更难?第169章 最后0.5公分第15章 夏雨菲的羡慕第42章 P站阿婆主第144章 时序逻辑电路和寄存器第278章 Root Me,Hack Me第4章 万界爬虫系统第213章 横生枝节第139章 野猪!?第412章 小女盆友,青梅竹马?第413章 得讲究点格调第187章 床下的小画册