zoukankan      html  css  js  c++  java
  • POJ3384 Feng Shui

    挖坟= =

    为了克服计算几何恐惧症来写的

    然后特么 spj有锅

    本地测应该是没啥问题的= =

    自闭了= =

    这个题就是每条边往里移R

    然后求半平面交

    再找个最远点对

    旋转卡壳或者枚举都可以

    sbspj浪费青春= =

    透他妈= =

    //Love and Freedom.
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define inf 20021225
    #define ll long long
    #define db double
    #define eps 1e-12
    #define debug printf("-------------
    ")
    using namespace std;
    
    struct poi
    {
    	db x,y;
    	poi(){}
    	poi(db _x,db _y){x=_x,y=_y;}
    };
    
    typedef poi vec;
    vec operator +(vec a,vec b){return vec(a.x+b.x,a.y+b.y);}
    vec operator -(vec a,vec b){return vec(a.x-b.x,a.y-b.y);}
    vec operator *(vec a,db b){return vec(a.x*b,a.y*b);}
    db mul(vec a,vec b){return a.x*b.y-a.y*b.x;}
    db val(vec a,vec b){return a.x*b.x+a.y*b.y;}
    db len(vec a){return sqrt(a.x*a.x+a.y*a.y);}
    db ang(vec a){return atan2(a.y,a.x);}
    
    struct line{poi p;vec v;db ang;};
    bool cmp(line a,line b)
    {
    	if(abs(a.ang-b.ang)<eps)	return mul(b.v+b.p-a.p,a.v)>eps;
    	return a.ang<b.ang;
    }
    bool onleft(line l,poi p)
    {
    	return mul(l.p-p,l.v+l.p-p)>0;
    }
    poi section(line a,line b)
    {
    	db k = mul(a.v+a.p-b.p,a.p-b.p)/(mul(a.v+a.p-b.p,b.v)+mul(b.v,a.p-b.p));
    	return b.p+b.v*k;
    }
    struct polygon
    {
    	poi p[210],s[210]; int n,cnt; db r;
    	line l[210]; int que[210],hd,tl;
    	poi a1,a2;
    	void put(poi a)
    	{
    		printf("%lf %lf
    ",a.x,a.y);
    	}
    	void scan()
    	{
    		scanf("%d%lf",&n,&r);
    		r -= eps;
    		for(int i=1;i<=n;i++)
    			scanf("%lf%lf",&p[i].x,&p[i].y);
    		reverse(p+2,p+n+1);
    		for(int i=1;i<=n;i++)
    		{
    			l[i].p = p[i];
    			l[i-1?i-1:n].v = p[i] - l[i-1?i-1:n].p;
    		}
    		l[n].v = p[1] - l[n].p;
    		//printf("%lf %lf",l[n].v.x,l[n].v.y);
    	}
    	void movein()
    	{
    		for(int i=1;i<=n;i++)
    		{
    			vec tmp = l[i].v;
    			db xx = tmp.x, yy= tmp.y;
    			tmp.y = xx; tmp.x = -yy;
    			db delta = r/len(tmp);// delta*=delta;
    			//put(tmp); printf("%lf
    ",delta);
    			tmp = tmp*delta;// vec qwq=l[i].p;
    			l[i].p = l[i].p + tmp;
    			//printf("%lf ",len(l[i].p-qwq));
    			l[i].ang = ang(l[i].v);
    			//printf("%lf
    ",l[i].ang);
    			//put(l[i].p); put(l[i].v);
    			//printf("---------------
    ");
    		}
    	}
    	void halfplane()
    	{
    		sort(l+1,l+n+1,cmp);
    		//printf("%d
    ",onleft(l[1],poi(0,0)));
    		//put(l[1].p); put(l[1].v);
    		//put(l[2].p); put(l[2].v);
    		//put(section(l[1],l[2]));
    		hd = tl = 1; que[hd] =1;
    		for(int i=2;i<=n;i++)
    		{
    			while(hd<tl && !onleft(l[i],s[tl-1]))	tl--;
    			while(hd<tl && !onleft(l[i],s[hd]))	hd++;
    			que[++tl] = i; //printf("%d %d %d
    ",i,hd,tl);
    			//put(l[i].p); put(l[i].v); debug;
    			if(hd<tl)	s[tl-1] = section(l[que[tl]],l[que[tl-1]]);
    		}
    		while(hd<tl && !onleft(l[que[hd]],s[tl-1]))
    		{
    			//printf("%d %d
    ",hd,tl);
    			//put(l[que[hd]].p); put(l[que[hd]].v);
    			//put(s[tl-1]); debug;
    			tl--;
    		}
    		if(hd<tl)	s[tl] = section(l[que[tl]],l[que[hd]]);
    		//for(int i=hd;i<=tl;i++)	put(s[i]);
    	}
    	void solve()
    	{
    		scan();
    		movein();
    		halfplane();
    		db ans=0.0;int tmp=hd+1;
    		s[tl+1] = s[hd];
    		for(int i=hd;i<=tl;i++)
    		{
    			//printf("QAQ");
    			int nxt = tmp+1>tl?hd:tmp+1;
    			while(mul(s[nxt]-s[i],s[nxt]-s[i+1])>mul(s[tmp]-s[i],s[tmp]-s[i+1]))	tmp=tmp+1>tl?hd:tmp+1,nxt=nxt+1>tl?hd:nxt+1;
    			//printf("%lf
    ",len(s[tmp]-s[i]));
    			if(ans < len(s[tmp]-s[i]))
    				ans = len(s[tmp]-s[i]),a1=s[tmp],a2=s[i];
    		}
    		/**for(int i=hd;i<=tl;i++)
    		for(int j=i+1;j<=tl;j++)
    		if(len(s[i]-s[j])>=ans)
    			a1=s[i],a2=s[j],ans=len(s[i]-s[j]);*/
    		printf("%.10lf %.10lf %.10lf %.10lf
    ",a1.x,a1.y,a2.x,a2.y);
    	}
    }poly;
    int main()
    {
    	poly.solve();
    	return 0;
    }
  • 相关阅读:
    message:"iconv(): Detected an illegal character in input string"
    VM Mac OS 无法开机
    你的爱 歌词
    大脑结构 | 前脑 | 中脑 | 后脑 | 脑干 | 大脑发育
    【分布计算环境笔记】10 SOA、网格计算、云计算与P2P技术
    【职场Tips】Language in IBM——献给所有即将成为IBMer的童鞋
    【系统工程师的自我修养】sed篇
    【Java学习笔记】如何写一个简单的Web Service
    Unison(双向同步软件)的安装与配置【转】
    发生java.lang.OutOfMemoryError: Direct buffer memory【转】
  • 原文地址:https://www.cnblogs.com/hanyuweining/p/10321886.html
Copyright © 2011-2022 走看看