2 条题解

  • 0
    @ 2024-12-28 20:44:19

    排一遍序,然后依次加上 aibni+1\lvert a_i-b_{n-i+1}\rvert 即可。可以证明这是最优方案。

    #include<bits/stdc++.h>
    #define int long long
    #define INF 0x3f3f3f
    using namespace std;
    int n,a[30001],b[30001];
    int ans;
    signed main(){
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>a[i];
    	for(int i=1;i<=n;i++)
    		cin>>b[i];
    	sort(a+1,a+n+1);
    	sort(b+1,b+n+1);
    	for(int i=1;i<=n;i++)
    		ans+=abs(a[i]-b[n-i+1]);
    	cout<<ans;
    	return 0;
    }
    
    • 0
      @ 2024-12-24 10:06:02

      C++ :

      #include<iostream>
      #include<cstring>
      #include<cstdio>
      #include<cmath>
      using namespace std;
      int a[10010],b[10010];
      int n;
      void init();
      void maopao(int a[]);
      void work();
      int main()
      {
      	init();
      	work();
      	return 0;
      }
      void init()
      {
      	//freopen("test0.in","r",stdin);
      	cin>>n;
      	for(int i=1;i<=n;++i)cin>>a[i];
      	for(int i=1;i<=n;++i)cin>>b[i];
      }
      void maopao(int a[])
      {
      	int temp,k;
      	for(int i=1;i<=n;i++)
      	{
      		temp=a[i];
      		k=i;
      		for(int j=i;j<=n;j++)
      		{
      			if(temp>a[j])
      			{
      				temp=a[j];
      				k=j;
      			}
      		}
      		temp=a[i];
      		a[i]=a[k];
      		a[k]=temp;
      	}
      }
      void work()
      {
      	maopao(a);
      	maopao(b);
      	int sum=0;
      	int d;
      	for(int i=1;i<=n;++i)
      	{
      		if(a[i]<b[n-i+1])d=b[n-i+1]-a[i];
      		else d=a[i]-b[n-i+1];
      		sum+=d;
      	}
      	cout<<sum<<endl;
      }
      
      • 1

      信息

      ID
      1823
      时间
      1000ms
      内存
      128MiB
      难度
      10
      标签
      递交数
      3
      已通过
      2
      上传者