题解 P7042 【「MCOI-03」正方】

· · 题解

今日月赛第一题题解:

我们先来观察题目,根据题目中给的这个正方形(如图)我们可以得出结论:

接下来来讲一下判断方法和内容:

就拿样例来说:

我们发现,正方形的边长应该是 (a+b),(c+d),(a+c),(b+d) = 1 + 3 = 4

我们就画出一个 4 \times 4 的正方形:

紧接着,我们在上面 作图 如上图给出的图片一样,看看能找到多少个:

于是乎我们发现四种情况(下图四个图形为四种情况,并不是四个正方形):

于是我们发现:

于是我们得出代码:

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        unsigned long long a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a==b&&a==c&&a==d&&b==c&&b==d&&c==d) cout<<1<<endl;
        else if(a+b==c+d||a+c==b+d||a+d==b+c){
            if(a==b||a==c||a==d||b==c||b==d||c==d) cout<<4<<endl;
            else if(a!=b||a!=c||a!=d||b!=c||b!=d||c!=d) cout<<8<<endl;
        }
        else cout<<0<<endl;
    }
    return 0;
}

Ps : 数据范围因为是 1 \le a,b,c,d \le 10^{18},所以需要使用 ull