博客园 首页 私信博主 显示目录 隐藏目录 管理

洛谷 题解 2165 [AHOI2009]飞行棋

本蒟蒻又来发题解了,

看到这个题目,本蒟蒻直接开始推公式。。

嗯,可以通过弧长,推出弦长(l = 2 * r * cos(90 * l / (r * Π));

然后对比各条弦长的平方和与直径的平方。

就可以了 QwQ

以上纯属瞎掰,回到正题

在我写完上面那种算法,然后苦苦调不出的时候。

我开始,怀疑我是不是思路有问题。

事实证明,好像确实有问题;

以上纯属瞎掰,回到正题+1

我们想一想,矩形有什么性质:

四个角都是直角。

嗯,如果在一个圆周内,什么样的角才是直角。

嗯,直径所对应的圆周角肯定是直角。

我没说是直角就一定对应直径。

好,因为所以的角都是直角。

那么两条边肯定都是直径。

那不就好过了吗?

上代码:

#include<bits/stdc++.h>
using namespace std;

#define maxn 50
int n, a[maxn], s[maxn], ans, sum;

int main()
{
scanf("%d", &n);//输入 
for(int i = 1; i <= n; ++ i)
{
scanf("%d", &a[i]);//输入 
s[i] = s[i - 1] + a[i];//处理前缀和 
sum += a[i];//sum是周长 
}
for(int i = 1; i <= n; ++ i)
for(int j = i + 1; j <= n; ++ j)
if(s[j] - s[i] == sum / 2)//判断是不是都是直径 
++ ans;
printf("%d", ans * (ans - 1) / 2);
return 0;
}
posted @ 2019-12-12 11:51  Flash_plus  阅读(182)  评论(0编辑  收藏  举报