求助!最后一个点TLE cpp

P2660 zzc 种田

…… 这个是你算法的问题了
by dengyujie2020 @ 2022-08-10 21:09:21


@[Qianxi_MRD](/user/586046) 这是[AC](https://www.luogu.com.cn/record/83272544)程序,可以直接提交 ``` #include<bits/stdc++.h> long long ans; int main() { cin》》x》》y; if(x》y) swap(x,y); while(x》0) { if(x《y) swap(x,y); ans+=4*y*(x/y); x-=x/y*y; } cout<<ans; return 0; } ``` 你是一个一个去做,去减 但是用包含除+取下整更快,毕竟x,y<10^18
by dengyujie2020 @ 2022-08-10 21:13:53


#### 我发现最后一个点超时了 我想了想,可以优化一下: 如果 tx 比 ty 大很多,tx = tx - ty就要重复很多次,浪费时间,所以把多个减法换成除法就可以了,也就是tx = tx % ty,然后上面的sum = sum + ty * 4 就要乘相应的(tx / ty)次 # 代码 ``` #include<iostream> using namespace std; int main(){ long long x,y; cin>>x>>y; long long sum=0; long long tx=x,ty=y;//……好像不需要?? for(;;){//话说while它不香吗? if(tx>ty){ sum=sum+ty*4*(tx/ty); tx=tx%ty; } else{ sum=sum+tx*4*(ty/tx); ty=ty%tx; } if(tx==0||ty==0) break; } cout<<sum; } ```
by WZRYWZWY @ 2022-08-10 21:21:48


@[Qianxi_MRD](/user/586046)
by WZRYWZWY @ 2022-08-10 21:22:40


主要问题出在if和else里面,一片一片的耕田速度太慢了,~~编不下去了,~~不多说,上源码 ![源代码](https://cdn.luogu.com.cn/upload/image_hosting/e9anx72h.png) 修改之后的版本(已AC[提交记录](https://www.luogu.com.cn/record/83282186)) ![修改版](https://cdn.luogu.com.cn/upload/image_hosting/392viosl.png)
by _miku @ 2022-08-10 22:50:57


感谢各位da lao 本贴完结
by Qianxi_MRD @ 2022-08-11 19:59:43


|