求助,关于代码运行效率
  • 板块灌水区
  • 楼主Eason_cyx大愚若智
  • 当前回复30
  • 已保存回复30
  • 发布时间2023/7/20 18:56
  • 上次更新2023/11/3 08:35:55
查看原帖
求助,关于代码运行效率
741244
Eason_cyx大愚若智楼主2023/7/20 18:56

rt,题目在此。 我的代码:

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL lcm(LL a,LL b) { return a/__gcd(a,b)*b; }
int main() {
	// freopen("1.in","r",stdin);
	// freopen("1.out","w",stdout);
	int T; cin >> T;
	while(T--) {
		LL n,a,b; cin >> n >> a >> b;
		LL amod = n - (n / a * a),bmod = n - (n / b * b),abmod = n - (n / lcm(a,b) * lcm(a,b));
		if(amod == 0) amod = a;
		if(bmod == 0) bmod = b;
		if(abmod == 0) abmod = lcm(a,b);
		LL asum = (a + n - amod) * ((n-amod) / a) / 2;
		LL bsum = (b + n - bmod) * ((n-bmod) / b) / 2;
		LL absum = (lcm(a,b) + n - abmod) * ((n-abmod) / lcm(a,b)) / 2;
		cout << asum + bsum - absum << endl;
	}
	return 0;
}

这个虽然正确性没问题,但是我们现在想制作强力数据,也就是题目中的 Subtest 3\textbf{Subtest 3},在 TT 约等于 5×1045 \times 10^{4} 的情况下,程序跑不动了。

原先我们预计时间复杂度是 O(T)O(T),现在看来常数非常大,求解决方案!已经把取模换掉了。

2023/7/20 18:56
加载中...