这次是在玩的空闲时间签了两个签到,本来是只想写E水个抽奖资格,后来发现A似乎也能写就由水一道,这个题解呢算是对两题的一个回顾。
先说E(嘻嘻)。高中时记得有个数学题是让比较大小的,现在想这个题觉得不会很难,毕竟过了很多人。就简单列了一下,然后提交,一发过,看来想的没错,以后可以记着了。我们分以下几种情况来看:
(1)x,y相等
(2)x,y不等,有一个为1
(3)x,y不等,且都大于2
那么我们只需要考虑第三种情况就好了。对于第三种情况,我们先假定x<y,然后我试了2,3;2,4;2,5;3,4;四组数据,计算比较就知道规律了。除了2,3是小于;2,4是等于;其余都是大于。emmmm,猜对了。

#include<iostream>
using namespace std;
int main() {
    int x,y;
    cin>>x>>y;
    if(x==y) {
        cout<<"=";
    }
    else {
        int f=0;
        if(x>y) {
            int temp=x;
            x=y;
            y=temp;
            f=1;
        }
        if(x==2&&y==3) {
            if(f) cout<<">";
            else cout<<"<";
        }
        else if(x==2&&y==4) {
            cout<<"=";
        }
        else if(x==1) {
            if(f) {
                cout<<">";
            }
            else {
                cout<<"<";
            }
        }
        else {
            if(f) {
                cout<<"<";
            }
            else {
                cout<<">";
            }
        }
    }
}

再说一下A。看一下数据范围,不大,可以暴力,就这么几个点,无非是先捡后捡,那么就直接给每个点标号,做个全排列,都计算一下取最小。过了的时候还是很开心的,这次用到了一个next_permutation这次是在玩的空闲时间签了两个签到,本来是只想写E水个抽奖资格,后来发现A似乎也能写就由水一道,这个题解呢算是对两题的一个回顾。
先说E(嘻嘻)。高中时记得有个数学题是让比较大小的,现在想这个题觉得不会很难,毕竟过了很多人。就简单列了一下,然后提交,一发过,看来想的没错,以后可以记着了。我们分以下几种情况来看:
(1)x,y相等
(2)x,y不等,有一个为1
(3)x,y不等,且都大于2
那么我们只需要考虑第三种情况就好了。对于第三种情况,我们先假定x<y,然后我试了2,3;2,4;2,5;3,4;四组数据,计算比较就知道规律了。除了2,3是小于;2,4是等于;其余都是大于。emmmm,猜对了。

#include<iostream>
using namespace std;
int main() {
    int x,y;
    cin>>x>>y;
    if(x==y) {
        cout<<"=";
    }
    else {
        int f=0;
        if(x>y) {
            int temp=x;
            x=y;
            y=temp;
            f=1;
        }
        if(x==2&&y==3) {
            if(f) cout<<">";
            else cout<<"<";
        }
        else if(x==2&&y==4) {
            cout<<"=";
        }
        else if(x==1) {
            if(f) {
                cout<<">";
            }
            else {
                cout<<"<";
            }
        }
        else {
            if(f) {
                cout<<"<";
            }
            else {
                cout<<">";
            }
        }
    }
}

再说一下A。看一下数据范围,不大,可以暴力,就这么几个点,无非是先捡后捡,那么就直接给每个点标号,做个全排列,都计算一下取最小。过了的时候还是很开心的,这次用到了一个next_permutation函数,之前用的比较少,也算是加深印象。

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    int t;
    cin>>t;
    while(t--) {
        int m,n;
        cin>>n>>m;
        int a[11]={0},b[11]={0},c[11]={0};
        cin>>a[0]>>b[0];
        int k;
        cin>>k;
        for(int i=1;i<=k;++i) {
            c[i]=i;
            cin>>a[i]>>b[i];
        }
        int res=-1;
        do {
            int num=0;
            for(int i=1;i<=k;++i) {
                num+=abs(a[c[i]]-a[c[i-1]])+abs(b[c[i]]-b[c[i-1]]);
            }
            num+=abs(a[c[k]]-a[0])+abs(b[c[k]]-b[0]);
            if(res==-1) res=num;
            else res=min(res,num);
        }while(next_permutation(c+1,c+k+1));
        cout<<"The shortest path has length "<<res<<"\n";
    }
}