我是靠谱客的博主 清秀河马,最近开发中收集的这篇文章主要介绍poj1106,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

极坐标排序+叉积判断夹角

View Code
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 200
#define eps 1.0e-8
struct Point
{
int x, y;
}s, point[maxn];
double r;
int n;
bool operator < (const Point &a, const Point &b)
{
return atan2((double)a.x, (double)a.y) < atan2((double)b.x, (double)b.y);
}
void input()
{
int cnt = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &point[cnt].x, &point[cnt].y);
point[cnt].x -= s.x;
point[cnt].y -= s.y;
if (r * r > point[cnt].x * point[cnt].x + point[cnt].y * point[cnt].y - eps)
cnt++;
}
n = cnt;
}
double xmulti(Point a, Point b)
{
return a.x * b.y - a.y * b.x;
}
bool within(Point a, Point b)
{
return xmulti(b, a) > -eps;
}
int work()
{
int r = 0;
int ans = 0;
for (int i = 0; i < n; i++)
{
while (r - i < n && within(point[i], point[r % n]))
r++;
ans = max(ans, r - i);
}
return ans;
}
int main()
{
//freopen("t.txt", "r", stdin);
while (scanf("%d%d%lf", &s.x, &s.y, &r), r >= 0)
{
input();
sort(point, point + n);
printf("%dn", work());
}
return 0;
}

 

最后

以上就是清秀河马为你收集整理的poj1106的全部内容,希望文章能够帮你解决poj1106所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部