WA 90,测试点5/6的疑惑
查看原帖
WA 90,测试点5/6的疑惑
122342
今夕何年楼主2022/11/24 23:21
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<limits.h>
#include<stack>
#include<cstdlib>
#include<stdlib.h>
#include<queue>
#include<map>
#include<vector>

#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)

using namespace std;
typedef unsigned long long ll;

int n,m;
ll A,B,C;
int t[100005],b[100005];

ll calc1(int);//出成绩时间调整的不满意度
ll calc2(int);//同学们等待不满意度 
ll ans;
	
int main()
{
	cin>>A>>B>>C>>n>>m;
	
	for(int i=1;i<=n;++i)cin>>t[i];
	sort(t+1,t+n+1);
	if(C>=1e16)
	{
		cout<<calc1(t[1]);
		return 0;
	}
	for(int j=1;j<=m;++j)
	{
		cin>>b[j];
	}
	sort(b+1,b+1+m);
	int maxx=100005,minn=1;
	ans=1e16;
	while(maxx-minn>10)
	{
		int mid1=minn+(maxx-minn)/3;
		int mid2=maxx-(maxx-minn)/3;
		
		if(calc1(mid1)+calc2(mid1)<=calc1(mid2)+calc2(mid2))maxx=mid2;
		else minn=mid1;
	} 
	
	for(int i=minn;i<=maxx;++i)
	{
		ans=min(ans,calc1(i)+calc2(i));
	}
	cout<<ans;
 	return 0;
}

ll calc1(int time)//出成绩时间调整的不满意度
{
	ll x=0,y=0;
	for(int i=1;i<=m;++i)
	{
		if(b[i]<time)x+=time-b[i];
		else y+=b[i]-time;
	}
	if(A<B)return A*min(x,y)+B*(y-min(x,y));
	return B*y; 
}

ll calc2(int time)//同学们等待不满意度 
{
	ll sum=0;
	for(int i=1;i<=n;++i)
	{
		if(t[i]<time)sum+=time-t[i];
	}
	return sum*C;
}

(前面头文件宏定义是习惯的初始化模板,请忽略~) 一遍遍对照答案看,为什么会出错呢?5/6有何奇妙之处?

2022/11/24 23:21
加载中...