zoukankan      html  css  js  c++  java
  • 极角排序+对称思想——poj2280

    用对称的思想,每次极角排序前,把黑点按原点对称,就可以转换成为白点进行统计了

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    #define N 200005
    #define db double
    const db eps=1e-6;
    const db pi=acos(-1);
    int sign(db k){if (k>eps) return 1; else if (k<-eps) return -1; return 0;}
    int cmp(db k1,db k2){return sign(k1-k2);}
    
    struct point{
        db x,y;int c;
        point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
        point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
        point operator * (db k1) const{return (point){x*k1,y*k1};}
        point operator / (db k1) const{return (point){x/k1,y/k1};}
        int getP() const{return sign(y)==1||(sign(y)==0&&sign(x)>=0);}
    };
    db cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
    db dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}
    
    bool operator<(const point k1,const point k2){
        if(k1.getP()==k2.getP())return sign(cross(k1,k2))>0;
        return k1.getP()<k2.getP();
    }
    
    point p[N],pp[N];
    int n,tot,ans;
    
    void solve(int id){
        tot=0;
        for(int i=1;i<=n;i++)if(i!=id){
            pp[++tot]=p[i]-p[id];
            pp[tot].c=p[i].c;
            if(pp[tot].c==1){
                pp[tot].x*=-1;
                pp[tot].y*=-1;
            }
        }
        sort(pp+1,pp+1+tot);
        for(int i=1;i<=tot;i++)pp[tot+i]=pp[i];
        
        int num=1,pos=1;
        for(int i=1;i<=tot;i++){
            while(pos+1<i+tot && sign(cross(pp[i],pp[pos+1]))>=0)
                pos++,num++;
            ans=max(ans,num);
            num--;
        }
    }
    
    int main(){
        while(cin>>n && n){
            ans=0;
            for(int i=1;i<=n;i++)
                scanf("%lf%lf%d",&p[i].x,&p[i].y,&p[i].c);
            for(int i=1;i<=n;i++)
                solve(i);
            cout<<ans+1<<'
    ';
        }
    }
  • 相关阅读:
    AG-Admin微服务框架入门
    使用node-webkit包装浏览器
    转 使用Docker部署 spring-boot maven应用
    转 docker的下载与安装
    Maven基本理解
    物联网垂直态势分析
    纯技术商业价值
    OpenLayers 3 入门教程
    转 从红帽、GitHub和Docker看开源商业模式的进阶
    关于 Total Commander 的标签(Tab)功能【转】
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12341507.html
Copyright © 2011-2022 走看看