1 条题解

  • 0
    @ 2024-12-26 17:11:21

    C :

    #include<stdio.h>
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		int s,n;
    		scanf("%d",&n);
    		int a[2*n];
    		for(int i=0;i<2*n;i++)
    		{
    			scanf("%d",&a[i]);
    		}
    		//对数组进行排序 
    		for(int i=0;i<2*n;i++)
    		{
    			for(int j=i-1;j>=0;j--)
    			{
    				if(a[j]<=a[j+1])
    				break;
    				
    				int temp=a[j+1];
    				a[j+1]=a[j];
    				a[j]=temp;
    			}
    		}
    		//任意排序算法皆可,上述代码为其中一种排序示例
    		//也可使用C++中的sort函数进行排序 
    		s=(a[n-1]-a[0])+(a[2*n-1]-a[n]);
    		printf("%d\n",s);
    	}
    	return 0;
    }
    

    C++ :

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=1e6+10;
    typedef pair<int,int> PII;
    typedef priority_queue<int , vector<int>, greater<int>> minqueue;  //从小到大 queue
    typedef priority_queue<int, vector<int>, less<int>> maxqueue;      //从大到小 queue
    
    int gcd(int a, int b){  //最大公因数 
        return b ? gcd(b, a % b) : a;
    }
    
    int lcm(int a, int b){ //最小公倍数 
        return a * b / __gcd(a, b);
    }
    
    int qmi(int base, int power, int p)  //快速幂求余 
    {
    	int result = 1;   
    	while (power > 0)           
    	{
    		if (power & 1)         							
    			result = result * base % p;   
    		base = base * base % p ;       						
    		power >>= 1;         						
    	}
    	return result % p;       
    }
    
    void solve()
    {
    	vector<int> vec;
    	int n;
    	cin>>n;
    	int x;
    	for(int i=0;i<2*n;i++){
    		cin>>x;
    		vec.push_back(x);
    	}
    	sort(vec.begin(),vec.end());
    	int ans=vec[n-1]-vec[0]+vec[2*n-1]-vec[n];
    	cout<<ans<<'\n';
    }
    
    signed main()
    {
    	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    	int t;
    	t=1;
    	cin>>t; 
    	while(t--)     
    	{
    		solve();
    	}
    	return 0;
    }
    

    Python :

    # coding=utf-8
    import heapq
    
    def manhattan_distance(p1, p2):
        return abs(p1[0] - p2[0]) + abs(p1[1] - p2[1])
    
    def min_path_length(n, points):
        # 构建最小生成树
        # 采用 Prim 算法
        mst_cost = 0
        visited = [False] * n
        min_heap = [(0, 0)]  # (成本, 点索引)
        
        while min_heap:
            cost, u = heapq.heappop(min_heap)
            
            if visited[u]:
                continue
            visited[u] = True
            mst_cost += cost
            
            # 更新与当前点的连接边
            for v in range(n):
                if not visited[v]:
                    distance = manhattan_distance(points[u], points[v])
                    heapq.heappush(min_heap, (distance, v))
        
        return mst_cost
    
    def solve():
        t = int(input())  # 测试用例数量
        for _ in range(t):
            n = int(input())  # 点的数量
            a = list(map(int, input().split()))  # 序列a
            
            # 将2n个数按顺序分为点的坐标 (x, y)
            a.sort()
            points = [(a[i], a[i + n]) for i in range(n)]
            
            # 计算最小路径长度
            print(min_path_length(n, points))
    
    if __name__ == "__main__":
        solve()
    
    
    • 1

    信息

    ID
    723
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    提交数
    4
    已通过
    1
    上传者