社区讨论

关于模意义下加法实现不同而在洛谷评测系统中产生的效率差

P8340 [AHOI2022] 山河重整参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo8siobp
此快照首次捕获于
2023/10/27 23:50
2 年前
此快照最后确认于
2023/10/27 23:50
2 年前
查看原帖
[AHOI2022]山河重整 这道题
我最开始使用的是如下的写法:
CPP
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
后根据其他人过了的代码更改成这样:
CPP
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优化的情况下都会产生稳定的差异。

回复

5 条回复,欢迎继续交流。

正在加载回复...