Edward 对等腰三角形情有独钟,据说他能在 0.0001s 内判断出一个图形是否是等腰三角形!但是,这还不能满足 Edward,最近,他又研究出来一种等腰三角形的新玩法。他随意收集了 5 根木棍,然后想要尽快计算出,使用这 5 根木棍能组成多少种不同的等腰三角形。但是这对他来说太难了,你能帮助他吗?
每根木棍在使用时不能弯折,但可以弃置不用。三角形的每条边可以由一根或多根木棍拼接而成。
输入格式
一个整数 T,表示有多少组测试数据。
对于每组测试数据,给出 5 个不超过 100 的正整数,代表选出的 5 根木棒的长度。
输出格式
输出能组成的不同等腰三角形的个数。
样例输入
2
1 1 1 1 1
1 1 1 1 2
样例输出
2
3
#include<stdio.h>
int a[10],s[10],v[10],xx[10],yy[10];
int ans;
void check() {
int x,y,flag,i;
if (s[1]==s[2]) x=s[1],y=s[3]; else
if (s[1]==s[3]) x=s[1],y=s[2]; else
if (s[2]==s[3]) x=s[2],y=s[1]; else
return;
if (x && y && 2*x>y) {
flag=1;
for (i=1;i<=ans;i++) if (xx[i]==x && yy[i]==y) {
flag=0;
break;
}
if (flag) {
ans++;
xx[ans]=x;
yy[ans]=y;
}
}
}
void dfs(int dep) {
int i;
if (dep>3) {
check();
return;
}
dfs(dep+1);
for (i=1;i<=5;i++) if (!v[i]) {
v[i]=1;
s[dep]+=a[i];
dfs(dep);
s[dep]-=a[i];
v[i]=0;
}
}
int main() {
int tt,i;
scanf("%d",&tt);
while (tt--) {
for (i=1;i<=5;i++) scanf("%d",a+i);
ans=0;
dfs(1);
printf("%d\n",ans);
}
}