CF1925B A Balanced Problemset? 题解

题目链接

洛谷链接

分析:

我们设分成的 \(n\) 个子任务为 \(a_1 \sim a_n\),即最大化 \(\gcd(a_1,a_2,\dots,a_n)\)

设这个答案为 \(ans\)\(a_1 = A_1 \times ans,a_2 = A_2 \times ans, \dots ,a_n = A_n \times ans\),那么这 \(n\) 个数的和为 \(ans(A_1 + A_2 + \dots + A_n)\)

显然,\(A_1 + A_2 + \dots + A_n \geq n\)。所以我们枚举 \(1 \leq ans \leq \lfloor \sqrt{x} \rfloor\),当 \(ans | x\) 时,判断 \(\frac{x}{ans}\)\(ans\) 是否能构成答案,即 \(ans\)\(\frac{x}{ans}\) 分别是否大于 \(n\),再取满足条件的 \(ans\) 中最大值即可。

复杂度 \(O(t \sqrt{x})\)

#include<bits/stdc++.h>
using namespace std;
int t,x,n,ans;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> t;
	while(t--){
		ans = 0;
		cin >> x >> n;
		for(int i = 1;i * i <= x;i++){
			if(!(x % i)){
				if(i >= n)
					ans = max(ans,x / i);
				else if(x / i >= n)
					ans = max(ans,i);
			}
		}
		cout << ans << '\n';
	}
	return 0;
}
posted @ 2024-01-28 09:34  5t0_0r2  阅读(79)  评论(0)    收藏  举报