关于模意义下加法实现不同而在洛谷评测系统中产生的效率差
查看原帖
关于模意义下加法实现不同而在洛谷评测系统中产生的效率差
105141
StaroForgin楼主2022/6/6 20:35

[AHOI2022]山河重整 这道题

我最开始使用的是如下的写法:

int add(int x,int y,int p){return x+y<p?x+y:x+y-p;}
void Add(int &x,int y,int p){x=add(x,y,p);}

交在洛谷上会T掉,loj上能过。

提交记录: 洛谷 loj

后根据其他人过了的代码更改成这样:

int add(int x,int y,int p){return (x+=y)<p?x:x-p;}
void Add(int &x,int y,int p){(x+=y)>=p&&(x-=p);}

就能在洛谷与loj上都通过了。

提交记录: 洛谷 loj

但是问题在于以上两个代码在LOJ上只有20ms左右的效率偏差,但是在洛谷上第二份代码跑1.7s,第一份代码3s的点都会T。

蒟蒻不太能理解造成这种结果的原因,也不像是随机情况下的评测姬波动,所以来问一问。

请大佬教教我。

注:以上两份代码在开启与不开启O2优化的情况下都会产生稳定的差异。

2022/6/6 20:35
加载中...