UVA(1606)

来源:互联网 发布:heinonline数据库 编辑:程序博客网 时间:2024/05/22 11:59
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set>#include<sstream>#include<cassert>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1000 + 5;struct Point {    int x, y;    double rad; // with respect to current point    int color;    bool operator<(const Point &rhs) const {        return rad < rhs.rad;    }}op[maxn], p[maxn];int n;int cnt;int ans;bool left(Point a, Point b){    return a.x*b.y - a.y*b.x>=0;}void solve(){    if (n <= 2)    {        cout << 2;        return;    }    ans = 0;    for (int i = 0; i < n; i++)    {        int k = 0;        for (int j = 0; j < n; j++)        {            if (j != i)            {                p[k].x = op[j].x - op[i].x;                p[k].y = op[j].y - op[i].y;                if (op[j].color)                {                    p[k].x = -p[k].x;                    p[k].y = -p[k].y;                }                p[k].rad = atan2(p[k].y, p[k].x);                k++;            }        }    sort(p, p + k);    int L = 0, R = 0, cnt = 2;    while (L < k)    {        if (R == L)        { R = (R + 1) % k; cnt++; } // empty interval        while (R != L && left(p[L], p[R]))         { R = (R + 1) % k; cnt++; } // stop when [L,R] spans across > 180 degrees        cnt--;        L++;        ans = max(ans, cnt);    }    }    cout<< ans<< endl;    return;}int main(){    ios::sync_with_stdio(false);    while (cin >> n, n)    {        for (int i = 0; i <n; i++)        {            cin >> op[i].x >> op[i].y >> op[i].color;        }        solve();    }    return 0;}
0 0
原创粉丝点击