思路
终于有一道自己想出来的题了,开心。
因为是矩形,一定有直角,所以考虑直径,之后由于矩形对角线是两条直径,所以考虑组合数。
直径有n条,矩形有c(n,2)个。
1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 using namespace std; 5 int res,hf,sum[25],a[25]; 6 map<int,int>mp; 7 long long fac(int k) 8 { 9 long long ans=1; 10 for(int i=1;i<=k;i++) 11 ans*=i; 12 return ans; 13 } 14 long long cb(int n,int m) 15 { 16 return (fac(n)/fac(m))/fac(n-m); 17 } 18 int main() 19 { 20 int n; 21 scanf("%d",&n); 22 for(int i=1;i<=n;i++) 23 { 24 scanf("%d",a+i); 25 sum[i]=sum[i-1]+a[i]; 26 mp[sum[i]]++; 27 } 28 if(sum[n]%2!=0) 29 { 30 printf("0 "); 31 return 0; 32 } 33 hf=sum[n]/2; 34 for(int i=1;i<=n;i++) 35 { 36 if(sum[i]>hf) 37 break; 38 if(mp[sum[i]+hf]) 39 res++; 40 } 41 printf("%lld ",cb(res,2)); 42 return 0; 43 }