分析
- 三角形面积 S = l ∗ h / 2 S=l*h/2 S=l∗h/2
- 在正方形上进行分解,那么只用考虑高的分配
- 为了方便判断我们把4的比值排序(升降序无所谓),并且按分数处理方式一样,拿gcd同分(要开long long!!!)
- 立马就能特判出一种情况:如果 a [ 1 ] + a [ 4 ] ! = a [ 2 ] + a [ 3 ] a[1]+a[4]!=a[2]+a[3] a[1]+a[4]!=a[2]+a[3] 那么显然是不存在的(可以画图)
- 样例给的很明白,直接把剩下两种情况也提示了
- a [ 1 ] = = a [ 2 ] a[1]==a[2] a[1]==a[2] && a [ 3 ] = = a [ 4 ] a[3]==a[4] a[3]==a[4] 那么显然只有4个就是当上下左右对换这样
- 那么反之,就有8个了。为什么?因为我们把组合成行的与组合成列的交换又能生成4个
代码
#include<bits/stdc++.h>
using namespace std;
long long a[2030];
inline long long read()
{
long long num=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') {num=(num<<1)+(num<<3)+ch-'0'; ch=getchar();}
return num*f;
}
inline long long gcd(long long x,long long y) {return !y?x:gcd(y,x%y);}
int main()
{
int T=read();
while(T--)
{
a[1]=read(),a[2]=read(),a[3]=read(),a[4]=read();
sort(a+1,a+1+4);
int d=gcd(a[1],a[2]); d=gcd(d,a[3]);d=gcd(d,a[4]);
a[1]/=d,a[2]/=d,a[3]/=d,a[4]/=d;
if(a[1]==a[2]&&a[2]==a[3]&&a[4]==a[3])
{
puts("1");
continue;
}
if(a[1]+a[4]!=a[2]+a[3])
{
puts("0");
continue;
}
else
{
if(a[1]==a[2]) puts("4");
else puts("8");
}
}
return 0;
}
其实就是想水一篇题解,哈哈哈哈嗝~