浙江大学软件学院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
浙大保研2019年上机题 7-2 Zigzag Sequence (25分)