思路
终于有一道自己想出来的题了,开心。
因为是矩形,一定有直角,所以考虑直径,之后由于矩形对角线是两条直径,所以考虑组合数。
直径有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\n"); 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\n",cb(res,2)); 42 return 0; 43 }
本文介绍了一种计算由给定点集构成的所有矩形数量的方法。通过利用组合数学的概念和性质,特别是针对矩形对角线的特点进行分析,得出直径为过圆上两点的直线这一结论,并给出了一段实现该算法的C++代码。
540

被折叠的 条评论
为什么被折叠?



