Cod sursa(job #2891097)

Utilizator matthriscuMatt . matthriscu Data 17 aprilie 2022 15:36:02
Problema Triang Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;

#define NMAX 50005

long long check(long double mn, long long *d, long long *v, long long n)
{
	long long ans = 0;
	for (long long i = 1; i <= n; ++i) {
		long long spent = (long long)(0.5 * (sqrt(1.0 + 4.0 * d[i] / mn) - 1.0) - v[i] + 1.0);
		if (spent >= 1)
			ans += spent;
	}
	return ans;
}

int main()
{
	ifstream fin("orase2.in");
	ofstream fout("orase2.out");

	long long n, x;
	fin >> n >> n >> x;

	long long d[NMAX], v[NMAX];
	for (long long i = 1; i <= n; ++i)
		fin >> d[i];
	for (long long i = 1; i <= n; ++i)
		fin >> v[i];
	
	long double st = 0, dr = 1e5, best;
	const long double eps = 0.00000000000000001;
	while (abs(st - dr) > eps) {
		long double mid = st + (dr - st) / 2.0;
		if (check(mid, d, v, n) < x)
			dr = mid;
		else
			best = st = mid;
	}

	long long total_spent = 0;
	long double total_time = 0;
	for (long long i = 1; i <= n; ++i) {
		long long spent = (long long)(0.5 * (sqrt(1.0 + 4.0 * d[i] / best) - 1.0) - v[i] + 1.0);
		if (spent < 1) {
			total_time += 1.0 * d[i] / v[i];
			continue;
		}
		total_spent += spent;
		total_time += 1.0 * d[i] / (v[i] + spent);
	}

	fout << (long long)(total_time + best * (total_spent - x)) << '\n';
}