社区讨论

为什么枚举到根号n还是超时啊?

P14826踩踩标参与者 7已保存回复 14

讨论操作

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

当前回复
14 条
当前快照
1 份
快照标识符
@mjh2n5ye
此快照首次捕获于
2025/12/22 19:27
2 个月前
此快照最后确认于
2025/12/25 10:40
2 个月前
查看原帖
CPP
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n,t,k;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0); 
	cin>>t;
	while(t--){
		ll ans = 4*1e18;
		cin>>n>>k;
		if(k == 0){
			cout<<0<<'\n';
			continue;
		}
		ll q = sqrt(n);
		if(q*q == n){
			cout<<min(q+q,k*n)<<'\n';
			continue;
		}
		for(int i = 1; i*i <= n; i++){
			ll j = n/i;
			ll c = n-i*j;
			//cout<<i<<" "<<j<<endl;
			ans = min(ans,i+j+k*c);
		}
		cout<<min(ans,k*n)<<'\n';
	}
	return 0;
}

回复

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

正在加载回复...