浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples相关的知识,希望对你有一定的参考价值。

思路一:

3个数组都按照小到大排序,设置3个指针,起始都在数组的末尾,如果1个指针向前移动1位可以让对应元素和另两个数组元素的距离之和减小,则移动它。如果某一回合三个指针都没动,就跳出循环。

非满分:23/25,应该是数据比较弱。

思路一代码:

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>

using namespace std;

const int maxn = 10010;

int A[maxn],B[maxn],C[maxn];

int main(){ 

	int la,lb,lc;
	cin>>la>>lb>>lc;
	
	for(int i=0;i<la;i++){
		cin>>A[i];
	}
	sort(A,A+la);
	for(int i=0;i<lb;i++){
		cin>>B[i];
	}
	sort(B,B+lb);
	for(int i=0;i<lc;i++){
		cin>>C[i];
	}
	sort(C,C+lc);
	
	
	int ia = la-1,ib = lb-1,ic = lc-1;
	while(ia>0||ib>0||ic>0){
		bool changed = false;
		if(abs(A[ia-1]-B[ib])+abs(A[ia-1]-C[ic])<abs(A[ia]-B[ib])+abs(A[ia]-C[ic])&&ia>0){
			ia--;
			changed = true;
		}
		if(abs(A[ia]-B[ib-1])+abs(B[ib-1]-C[ic])<abs(A[ia]-B[ib])+abs(B[ib]-C[ic])&&ib>0){
			ib--;
			changed = true;	
		}
		if(abs(A[ia]-C[ic-1])+abs(B[ib]-C[ic-1])<abs(A[ia]-C[ic])+abs(B[ib]-C[ic])&&ic>0){
			ic--;
			changed = true;
		}
		if(changed == false)break;
	}
	int minD = abs(A[ia]-B[ib])+abs(A[ia]-C[ic])+abs(B[ib]-C[ic]);
	
	printf("MinD(%d, %d, %d) = %d",A[ia],B[ib],C[ic],minD);
	
	return 0;
}

以上是关于浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples的主要内容,如果未能解决你的问题,请参考以下文章

浙江大学软件学院2020年保研上机模拟练习 7-4 Shopping With Coupons

2021年保研夏令营经验贴

浙大保研2019年上机题 7-2 Zigzag Sequence (25分)

华中科技大学_2006保研___考研计算机_复试上机

北京邮电大学研究生的计算机专业上机复试我要用啥环境练习啊?用C语言编程软件可以么?

保研——夏令营预推免全过程经验贴