14, 15死活过不去,求助
查看原帖
14, 15死活过不去,求助
762588
Edgebright楼主2023/5/12 20:03
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int N = 100005, I = 18446744073709551615;
int A, B, C;
int n, m, mxt, mnt = 2e9;
int t[N], b[N], Ts[N], Bs[N];
int ans = I;
inline bool cmp(int x,int y)
{
	return x > y;
}
template<class io>
inline void re(io &x)
{
	char c=getchar();x=0;
	while(c<48 || c>57)c=getchar();
	while(c>47 && c<58)x=(x<<3)+(x<<1)+(c&15),c=getchar();
	return;
}
template<class io>
void wr(io x)
{
	io d=x/10;if(d)wr(d);
	putchar(x-(d<<3)-(d<<1)|48);
	return;
}
signed main()
{
	re(A); re(B); re(C);
	re(n); re(m);
	for(int i=1;i<=n;++i)
	{
		re(t[i]);
		mnt = min(mnt, t[i]);
//		mxt = max(mxt, b[i]);
	}
	sort(t + 1, t + n + 1);
	for(int i=1;i<=n;++i)
	{
		Ts[i] = Ts[i - 1] + t[i];
	}
	for(int i=1;i<=m;++i)
	{
		re(b[i]);
//		mxt = max(mxt, b[i]);
	}
	sort(b + 1, b + m + 1);
	for(int i=1;i<=m;++i)
	{
		Bs[i] = Bs[i - 1] + b[i];
	}
	for(int T = mnt; T <= N ; ++T)
	{
		int id = lower_bound( b+1, b+m+1, T ) - b - 1;
		int x = id * T - Bs[id];
		int y = Bs[m] - Bs[id] - (m - id) * T;
		int P;
		if(A >= B)
		{
			P = y * B;
		}
		else
		{
			if(y > x)
			{
				P = x * A + (y - x) * B;
			}
			else
			{
				P = x * A;
			}
		}
		int stud_id = lower_bound( t+1, t+n+1, T ) - t - 1;
		P += ( stud_id * T - Ts[stud_id] ) * C;
		ans = min(ans, P);
//		if(C > 1e15)break;
//		printf("T%lld id%lld x%lld y%lld P%lld\n",T,id,x,y,P);
	}
	wr(ans);
	return 0;
}
2023/5/12 20:03
加载中...