Rating changes for last rounds are temporarily rolled back. They will be returned soon. ×

 
 
 
 
General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
60002491 Contestant:
Apollochen
1214F - 59 GNU C++11 Accepted 171 ms 4708 KB 2019-09-04 13:19:22 2019-09-04 15:04:39
→ Source
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int N = 200005;
int n,m,p[N];
struct node
{
	int x,idx;
	bool operator < (const node &a) const {return x<a.x;}
}a[N],b[N];
ll check(int x)
{
	ll ret=0;
	if(x<0)
	{
		for(int i=1;i<=-x;i++)ret+=b[i].x+m-a[n+x+i].x;
		for(int i=-x+1;i<=n;i++)ret+=abs(b[i].x-a[i+x].x);
	}else
	{
		for(int i=1;i<=x;i++)ret+=a[i].x+m-b[n-x+i].x;
		for(int i=x+1;i<=n;i++)ret+=abs(a[i].x-b[i-x].x);
	}return ret;
}
void print(int x)
{
	if(x<0)
	{
		for(int i=1;i<=-x;i++)p[b[i].idx]=a[n+x+i].idx;
		//ret+=b[i].x+m-a[n-i+1].x;
		for(int i=-x+1;i<=n;i++)p[b[i].idx]=a[i+x].idx;
		//ret+=abs(b[i].x-a[i+x].x);
		// return ret;
	}else
	{
		for(int i=1;i<=x;i++)p[b[n-x+i].idx]=a[i].idx;
			//ret+=a[i].x+m-b[n-i+1].x;
		for(int i=x+1;i<=n;i++)p[b[i-x].idx]=a[i].idx;
			//ret+=abs(a[i].x-a[i-x].x);
		// return ret;
	}
}
int q[N];
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i].x),a[i].idx=i;sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)scanf("%d",&b[i].x),b[i].idx=i;sort(b+1,b+n+1);
	int l=-n,r=n;
	while(l<r)
	{
		int m=(l+r)>>1;
		if(check(m)<check(m+1))r=m;else l=m+1;
	}
	printf("%lld\n",check(l));print(l);
	for(int i=1;i<=n;i++)q[p[i]]=i;
	for(int i=1;i<=n;i++)printf("%d ",q[i]);
}



?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details