站外题 01 分数规划求调
  • 板块学术版
  • 楼主endswitch
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/3 22:29
  • 上次更新2024/9/4 15:20:02
查看原帖
站外题 01 分数规划求调
773915
endswitch楼主2024/9/3 22:29

link

代码:

#include <bits/stdc++.h>
#define int long long
#define db double
#define pb push_back
using namespace std;

const int N = 1e3 + 5, eps = 1e-6;
int n, k;
db a[N], b[N];

inline bool check(db x) {
	vector<db> vec;
	
	for(int i = 1 ; i <= n ; ++ i)
		vec.pb(a[i] - x * b[i]);
	
	sort(vec.begin(), vec.end(), greater<db>());
	
	db res = 0;
	
	for(int i = 0 ; i < k ; ++ i)
		res += vec[i];
	
//	cout << res << '\n';
	
	return res >= eps;
}

inline void solve() {
	for(int i = 1 ; i <= n ; ++ i)
		cin >> a[i];
	for(int  i= 1 ; i <= n ; ++ i)
		cin >> b[i];
	
	db l = -1e12 - 5.0, r = 1e12 + 5.0, mid;
	
	while(r - l > eps) {
		mid = (l + r) / 2;
		
		if(check(mid)) l = mid;
		else r = mid;
		
//		cout << l << ' ' << r << '\n';
	}
	
	cout << (int)round(r) << '\n';
}

signed main() {
	ios_base :: sync_with_stdio(NULL);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
	while(true){
		cin >> n >> k;
		
		if(! n && ! k) return 0;
		
		solve();
	}
	
	return 0;
}
2024/9/3 22:29
加载中...