思路
思路很简单,把a和b排个序,然后每次贪心地获得最大快乐值-最小痛苦值,每个三次就加上m,然后记录每次更新后的最大值就可以了。 1e6的数据,不加任何优化会有点危。
代码
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int N=1e6+7;
int n,m,a[N],b[N];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int j=1;j<=n;j++) cin>>b[j];
stable_sort(a+1,a+1+n);
stable_sort(b+1,b+1+n);
int ans=0,tmp=0;
for(int i=1,j=n;i<=n;i++,j--){
if(i%3==0) tmp+=m;
tmp+=(b[j]-a[i]);
ans=max(tmp,ans);
}
cout<<ans<<"\n";
return 0;
}