题解:AT_abc416_d [ABC416D] Match, Mod, Minimize 2
题面大意
给定两个长度都为
其中
(
思路
根据
所以在模
第一种:
第二种:
可以很清楚的发现,第二种是完全优于第一种的,所以我们要尽可能多的产生第二种。
贪心的考虑,给每个
将两个数组排个序,因为有单调性了所以后面可以直接双指针做。
AC CODE:
#include<bits/stdc++.h>
using namespace std;
long long _,n,m,a[300005],b[300005],ans;
inline bool cmp(long long x,long long y){
return x>y;
}
int main(){
scanf("%lld",&_);
while(_--){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=n;i++){
scanf("%lld",&b[i]);
}
sort(a+1,a+n+1);
sort(b+1,b+n+1,cmp);
long long tp=1;
ans=0;
for(int i=1;i<=n;i++){
while(b[i]+a[tp]<m && tp<=n)tp++;
if(tp==n+1)break;
ans+=(b[i]+a[tp])%m;
b[i]=a[tp]=0;
tp++;
}
for(int i=1;i<=n;i++){
ans+=a[i]+b[i];
}
printf("%lld\n",ans);
}
}