给定圆上一些点求组成矩形个数

例题传送门

可以\(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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午2:46
下一篇 2023年3月2日 上午2:46

相关推荐