首页 > 其他分享 >RQNOJ 698(矩形计数-圆内接矩形数)

RQNOJ 698(矩形计数-圆内接矩形数)

时间:2022-10-25 10:01:56浏览次数:58  
标签:矩形 .. int 698 样例 RQNOJ include 坐标


查看题目 Show Problem

题目:矩形计数

问题编号:698



题目描述

给出圆周上的N个点,请你计算出以这些点中的任意四个为四个角,能构成多少个矩形。
点的坐标是这样描述的,给定一个数组v[1..N],假设圆心为(0,0),圆的周长C=∑v[1..N] ,第一个点坐标为(0,C/(2π))。从第一个点开始,顺时针沿圆周走v1个单位长度,此时坐标为第二个点的坐标,再走v2个单位长度,此时为第三个点的坐标,当走完v1,v2..vi个距离后,为第i+1个点的坐标(全过程都是沿圆周顺时针)。特别的,走完v1,v2..vn个距离后,就会回到第一个点。

对于100%的数据,有N<=20,V数组中的所有元素的值<=100。

输入格式

输入共N+1行。
第一行为正整数N。
接下来N行每行一个正整数。其中第i+1行表示的是v[i]。

输出格式

输出共1行,一个整数,表示能构成的矩形的个数。

样例输入

8

1

2

2

3

1

1

3

3


样例输出

3

//样例解释[img]http://www.rqnoj.cn/ProblemPic/P698-101656.png[/img]

RQNOJ 698(矩形计数-圆内接矩形数)_数组


观察图片,易发现圆内的内接矩形对角线交点必过圆心(初中证明……)

所以只要找到所有对角线就行了



#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#include<cmath>
#include<cstdlib>
using namespace std;
#define MAXN (100+10)
int n,c=0,m=0,a[MAXN];
int main()
{
scanf("%d",&n);
a[1]=0;
for (int i=2;i<=n;i++)
{
scanf("%d",&a[i]),c+=a[i];
if (!a[i]) i--,n--;
else a[i]=c;
}
int p;
scanf("%d",&p);c+=p;
int l=1,r=1;
while (r<=n&&l<=n)
{
if (a[r]-a[l]==c/2) {/*cout<<l<<' '<<r<<endl;*/m++;l++;}
else if (a[r]-a[l]<c/2) r++;
else l++;
}
cout<<m*(m-1)/2<<endl;
return 0;
}




标签:矩形,..,int,698,样例,RQNOJ,include,坐标
From: https://blog.51cto.com/u_15724837/5794015

相关文章