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;
}