CF1651C题解
这道题目题意有点难懂,基本上意思是让四个角和四个点相连(这四个点也可以是角)。只需找出两边中间最大值,随后考虑四个角两两相连的情况。
#include<bits/stdc++.h>
using namespace std;
long long __abs(long long q,long long p){
if( p == q)return 0;
else if(p<q)return q-p;
return p-q;}
long long __mn(long long k,long long l){
if(k>=l)return l;
return k;
}
int main(){
int t;
cin >> t;
for(int i = 0;i<t;i++){
bool can = 1;
int n;
long long mn = 10000000000;
cin >> n;
long long a[n+5];
long long b[n+5];
for(int j = 0;j<n;j++)cin >> a[j];
for(int j = 0;j<n;j++)cin >> b[j];
//二点
//四点
//两两不相连
int p1,p2,p3,p4;
long long mn5 = __abs(a[0],b[0]);
long long mn6 = __abs(a[n-1],b[n-1]);
long long mn7 = __abs(a[0],b[n-1]);
long long mn8 = __abs(a[n-1],b[0]);
long long mn1 = 100000000000,mn2 = 100000000000,mn3=1000000000000,mn4 =1000000000000;
for(int j = 0;j<n;j++){
if(__abs(a[0],b[j])<mn1){
mn1= __abs(a[0],b[j]);}
if(__abs(a[n-1],b[j])<mn2){
mn2 = __abs(a[n-1],b[j]);}
if(__abs(b[0],a[j])<mn3){
mn3 = __abs(b[0],a[j]);
}if(__abs(b[n-1],a[j])<mn4){
mn4 = __abs(b[n-1],a[j]);
}
}
mn= __mn(mn5+mn6,mn);
mn = __mn(mn7+mn8,mn);
mn = __mn(mn1+mn3+mn6,mn);
mn = __mn(mn1+mn4+mn8,mn);//cout << mn << " ";
mn = __mn(mn2+mn3+mn7,mn);//cout << mn << " ";
mn = __mn(mn2+mn4+mn5,mn);//cout << mn << " ";
mn= __mn(mn1+mn2+mn3+mn4,mn);
cout << mn << endl;
}return 0;
}