可以\(C_n^{4}\)暴力枚举四个点,根据前缀和计算4条边判断。
但是发现矩形的对角线是一定经过圆心的,而且任意两条直线可以组成一个矩形。
那我们\(C_n^2\)枚举点,用前缀和算出两点间圆弧距离,为圆周长一半就是直径。
最后答案是\(直径数*(直径数-1)/2\)
当然,当圆周长是奇数时无解,因为这里给出的点都是整点
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=22;
int n,sumn,ans,a[maxn],pre[maxn];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sumn+=a[i];
pre[i]=pre[i-1]+a[i];
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
for(int q=j+1;q<=n;q++)
for(int w=q+1;w<=n;w++)
{
int a=pre[i]+pre[n]-pre[w],b=pre[j]-pre[i];
int c=pre[q]-pre[j],d=pre[w]-pre[q];
if(a==c&&b==d) ans++;
}
cout<<ans;
//另一种方法
/* for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(pre[j]-pre[i]==sumn/2) ans++;//判断直径
cout<<(sumn%2==1?0:ans*(ans-1)/2); /*周长奇数就是0*/
}
原文链接: https://www.cnblogs.com/iss-ue/p/12777802.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/344570
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!