亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? noj 1098 旋轉卡殼.txt

?? ACM資料大集合
?? TXT
字號:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
using namespace std;

//NOJ 1098 旋轉卡殼
#define MAX 99999999
#define MIN -99999999
#define NMAX 35
#define PI 3.1415926
double fenshu[12]={100,10,10,10,10,10,10,10,10,10,10,10};

typedef struct point
{
	double x;
	double y;
}point;

point tubao[NMAX];//圍成凸包的點,順時針順序
point shuru[NMAX];
point chuli[NMAX];
bool cmpx(point a,point b) {return a.x<b.x;}

bool dtb(point o,point a,int num)
{//判斷點是否在oa向量的一側,是則返回true,否則返回false;
	int i;
	for(i=1;i<=num;i++)
	{
		if(o.x*a.y+a.x*chuli[i].y+chuli[i].x*o.y
			-chuli[i].x*a.y-a.x*o.y-o.x*chuli[i].y>0) break; 
	}
	if(i==num+1) return true;
	else return false;
}

double get_gen2dis(point a,point b)
{
	return (pow(a.x-b.x,2)+pow(a.y-b.y,2))/2.0;
}

void print_tubao(int tbnum)
{
	int i;
	for(i=1;i<=tbnum;i++)
		cout<<tubao[i].x<<" "<<tubao[i].y<<endl;
	
}

/*
int create_tubao(int num)
{	//順帶得到凸包點的個數
	//求凸包的O(n^3)的算法
	int i,j;
	int flag[NMAX];
	point last;
	for(i=1;i<=num;i++) 
	{
		chuli[i]=shuru[i];
		flag[i]=0;
	}
	sort(chuli+1,chuli+1+num,cmpx);

	tubao[1]=chuli[1];
	last=chuli[1];
	flag[1]=1;
	j=1;
	while(true)
	{
		for(i=2;i<=num;i++)
		{
			if(flag[i]==0)
			{//已放入tubao[]里的點不訪問
				if(dtb(last,chuli[i],num)==true)
				{	//符合dbt()的點都扔到tubao[]里
					tubao[++j]=chuli[i];
					last=chuli[i];
					flag[i]=1;
					break;
				}
			}
		}
		if(i==num+1) break;//找到了所有凸包點
	}
	return j;
}
*/
double get_dis(point a,point b)
{	//求兩點距離
	return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}

double get_dj(point oa,point a,point ob,point b)
{	//求得向量oa->a,ob->b的點積
	return (a.x-oa.x)*(b.x-ob.x)+(a.y-oa.y)*(b.y-ob.y);
}

double get_mianji(point a,point b,point c)
{
	return a.x+b.y+c.x*a.y+b.x*c.y-c.x*b.y-b.x*a.y-a.x*c.y;
}
double get_high(point o,point a,int tbnum)
{	//通過離向量o->a距離最遠的點,求得高
	int i;
	double s,high,max=MIN,min=MAX;
	for(i=1;i<=tbnum;i++)
	{
		s=get_mianji(o,a,tubao[i]);
		if(max<s) max=s;
		if(min>s) min=s;
	}
	high=(max-min)/get_dis(o,a);
	return high;
}

double get_wide(point o,point a,int tbnum)
{	//通過與向量o->a距離點積最大最小的點,求得寬
	int i;
	double min,max,temp,tt,result;
	min=MAX;max=MIN;
	point mindian,maxdian;
	for(i=1;i<=tbnum;i++)
	{
		temp=get_dj(o,a,o,tubao[i]);
		if(min>temp) {min=temp;mindian=tubao[i];}
		if(max<temp) {max=temp;maxdian=tubao[i];}
	}
	temp=(double)fabs(get_dj(o,a,mindian,maxdian));
	tt=get_dis(o,a);
	result=temp/tt;
	return result;
}

point rotate(point o,double alpha,point p) 
{ //點p繞點o旋轉alpha角后的坐標
	point tp; 
	p.x-=o.x; 
	p.y-=o.y; 
	tp.x=p.x*cos(alpha)-p.y*sin(alpha)+o.x; 
	tp.y=p.y*cos(alpha)+p.x*sin(alpha)+o.y; 
	return tp; 
} 

/*
double get_angle(point o,point s,point e) 
{	//返回頂角在o點,起始邊為os,終止邊為oe的夾角
	double cosfi,fi,norm; 
	double dsx = s.x - o.x; 
	double dsy = s.y - o.y; 
	double dex = e.x - o.x; 
	double dey = e.y - o.y; 

	cosfi=dsx*dex+dsy*dey; 
	if(((double)(fabs(cosfi)))<0.00001) cosfi=0;
	norm=(dsx*dsx+dey*dey)*(dex*dex+dey*dey); 
	cosfi /= sqrt( norm ); 

	if (cosfi >= 1.0 ) return 0; 
	if (cosfi <= -1.0 ) return -3.1415926; 

	fi=acos(cosfi); 
	if (dsx*dey-dsy*dex>0) return fi; // 說明矢量os 在矢量 oe的順時針方向 
	return -fi; 
} 
*/
double xzkk(int tbnum)
{//用旋轉卡殼法求解最大覆蓋正方形的面積,xzkk=旋轉卡殼,那xzdsm=???
 //枚舉所有度數求,先枚舉一個大致角度,然后在最優角度附近逐次逼近
   int i,j,k;
   double wide,high,bc,min,answer;
   double alpha,pal,end,begin,minalp;
   double zumin[NMAX],lastbc,longbc;

   point last,now,temp,p1,p2,tt;
   p1.x=0.00;p1.y=0.00;p2.x=1.00;p2.y=0.00;
   min=MAX;
   //初始的角度范圍是0~PI/2 
	begin=0;
	end=PI/2;
	//fenshu[]一開始很大,后來很小,因為確定第一次的大致角度很重要
   pal=(end-begin)/fenshu[0];
	for(i=1;i<=11;i++)
	{
		for(alpha=begin,j=1;alpha<=end;alpha+=pal,j++)
		{
			temp=rotate(p1,alpha,p2);
			wide=get_wide(temp,p1,tbnum);
			high=get_high(temp,p1,tbnum);
			if(wide>high) bc=wide;
			else bc=high;
			if(bc<min) {min=bc;minalp=alpha;}
		}
		//minalp是這一次的最優角度
		begin=minalp-pal; 
		end=minalp+pal;
		//在最優角度附近逐次逼近,下一次的范圍就是minalp-pal ~ minalp+pal
		pal=(double)fabs((end-begin)/fenshu[i]);
		if(pal<0.0000000000000001) break;
	}
	answer=pow(min,2);
  return answer;
}

typedef struct vec
{
	double x;
	double y;
	double len;
}vec;

double get_dj(vec a,vec b)
{//向量a,b的點積
	return a.x*b.x+a.y*b.y;
}

double get_qj(vec a)
{
	if(a.x==0&&a.y>0) return PI/2;
	else if(a.x==0 && a.y<0) return 3*PI/2;
	else if(a.x<0) return atan(a.y/a.x)+PI;
	else if(a.x>0&&a.y<0) return atan(a.y/a.x)+2*PI;
	else return atan(a.y/a.x);
}
bool cmqj(point a,point b)
{//比較a,b關于水平線的傾角
	point o;
	vec oa,ob;
	//點o是多邊形任意三個點所圍成三角形的重心,這個點必在凸包內
	o.x=(shuru[1].x+shuru[2].x+shuru[3].x)/3;
	o.y=(shuru[1].y+shuru[2].y+shuru[3].y)/3;
	//o->s是水平方向長度為1的向量
	oa.x=a.x-o.x; oa.y=a.y-o.y; oa.len=sqrt(pow(a.x-o.x,2)+pow(a.y-o.y,2)); 
	ob.x=b.x-o.x; ob.y=b.y-o.y; ob.len=sqrt(pow(b.x-o.x,2)+pow(b.y-o.y,2)); 
	return get_qj(oa)<get_qj(ob);
}

bool cmfx(point mm,point o,point e)
{//判斷點mm是不是在向量p->e的左側
	double a,b,c;
	a=e.y-o.y;b=o.x-e.x;c=o.x*e.y-o.y*e.x;
	if(mm.x*a+b*mm.y<c) return true;
	return false;
}

int get_next(int now,int num)
{
	if(now==num) return 1;
	else return now+1;
}

int create_xulie(int num)
{
	int i,j;
	point temp[NMAX];
	for(i=1;i<=num;i++) temp[i]=shuru[i];
	sort(temp+1,temp+1+num,cmqj);
	chuli[1]=temp[1];
	j=1;
	for(i=2;i<=num;i++)
	{
		if(!(temp[i].x==temp[i-1].x &&temp[i].y==temp[i-1].y)) chuli[++j]=temp[i];
	}
	return j;
}

int create_tubao(int num)
{
	//scan算法求凸包,O(nlogn)
	int minnum,rnum;
	int i,s;
	double min;
	min=MAX;
	rnum=create_xulie(num);
	for(i=1;i<=rnum;i++) if(chuli[i].x<min) {min=chuli[i].x;minnum=i;}
	tubao[1]=chuli[minnum];
	i=get_next(minnum,rnum);
	tubao[2]=chuli[i];
	s=2;//棧頂位置
	i=get_next(i,rnum);
	do
	{
		//注意s>=2,這樣棧最多退到只剩一個點 
		while(cmfx(chuli[i],tubao[s-1],tubao[s])==false&&s>=2)
			s--;
		tubao[++s]=chuli[i];//滿足凸包條件,或棧只剩一個點時
		i=get_next(i,rnum);
	}
	while(!((chuli[i].x==tubao[1].x)&&(chuli[i].y==tubao[1].y)));//循環一圈
	//最后一個點是否在凸包上,還要再判斷
	if(cmfx(chuli[i],tubao[s-1],tubao[s])==false) s--;
	return s;
}
/*
int main()
{
	int num,i,j,casenum,tbnum,bb;
	FILE *fp;
	double ans;
	scanf("%d",&casenum);
	fp=fopen("my_out.txt","w");
	for(i=1;i<=casenum;i++)
	{
		scanf("%d%d",&bb,&num);
		for(j=1;j<=num;j++)
			cin>>shuru[j].x>>shuru[j].y;
		tbnum=create_tubao(num);//構造凸包
		if(tbnum>=3)
		{
			ans=xzkk(tbnum);
			fprintf(fp,"%d  %.2f\n",i,ans);
		}
		else if(tbnum==2)
			fprintf(fp,"%d  %.2f\n",i,get_gen2dis(tubao[1],tubao[2]));
		else fprintf(fp,"%d  0.00\n",i);
	}
	fclose(fp);
	return 0;
}
*/

int main()
{
	int num,i,j,casenum,tbnum,bb;
	scanf("%d",&casenum);
	for(i=1;i<=casenum;i++)
	{
		scanf("%d",&num);
		for(j=1;j<=num;j++)
			cin>>shuru[j].x>>shuru[j].y;
		tbnum=create_tubao(num);//構造凸包
		if(tbnum>=3)
			printf("%.2f\n",xzkk(tbnum));
		else if(tbnum==2)
			printf("%.2f\n",get_gen2dis(tubao[1],tubao[2]));
		else printf("0.00\n");
	}
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品av久久707| 久久激五月天综合精品| 无吗不卡中文字幕| 国产成人综合亚洲91猫咪| 色美美综合视频| 久久嫩草精品久久久久| 亚洲超碰精品一区二区| 成人国产精品视频| 欧美大片在线观看一区二区| 一区二区三区精品久久久| 国产精品一品二品| 日韩午夜av电影| 一区二区三区欧美久久| 成+人+亚洲+综合天堂| 精品国产sm最大网站免费看| 丝袜亚洲另类丝袜在线| 在线这里只有精品| 亚洲柠檬福利资源导航| 成人午夜激情片| 日本一区二区久久| 激情文学综合丁香| 日韩精品一区二| 蜜臀久久99精品久久久久宅男| 色哟哟日韩精品| 亚洲女爱视频在线| 色综合久久88色综合天天| 国产精品二区一区二区aⅴ污介绍| 久草在线在线精品观看| 欧美一区二区福利视频| 日本欧美在线观看| 日韩一区二区影院| 日韩精品一二三区| 欧美疯狂性受xxxxx喷水图片| 亚洲成av人综合在线观看| 欧美午夜精品免费| 亚洲一二三四区| 欧美日韩国产大片| 美日韩一区二区三区| 日韩欧美激情在线| 精品综合免费视频观看| 久久麻豆一区二区| caoporm超碰国产精品| 国产精品理伦片| 色94色欧美sute亚洲线路二 | 国产精品少妇自拍| 国产成人aaaa| 亚洲三级电影网站| 欧美日韩国产综合一区二区| 亚洲第一久久影院| 精品免费99久久| 91精品91久久久中77777| 亚洲美女屁股眼交3| 在线精品国精品国产尤物884a| 亚洲综合色视频| 日韩欧美专区在线| 国产一区二区三区免费| 国产精品免费aⅴ片在线观看| 成+人+亚洲+综合天堂| 亚洲午夜视频在线观看| 欧美一区二区三区公司| 国产成人免费视频精品含羞草妖精 | 欧美日韩国产小视频| 日韩精品久久久久久| www精品美女久久久tv| 波多野结衣一区二区三区| 亚洲自拍都市欧美小说| 日韩欧美国产综合在线一区二区三区| 国产揄拍国内精品对白| 亚洲一区在线视频观看| 欧美大片免费久久精品三p| 国产成人无遮挡在线视频| 亚洲一区二区不卡免费| 久久综合999| 色狠狠综合天天综合综合| 蜜桃久久精品一区二区| 1区2区3区国产精品| 日韩精品一区二区三区在线播放| 岛国av在线一区| 日本一不卡视频| 亚洲免费色视频| 久久综合色婷婷| 精品视频1区2区| 成人av一区二区三区| 免费观看日韩电影| 亚洲一区二区三区四区在线免费观看 | 国产福利视频一区二区三区| 成人欧美一区二区三区黑人麻豆 | 亚洲国产精品久久人人爱| 久久久久青草大香线综合精品| 91久久精品一区二区三| 国产一区二区三区久久悠悠色av| 一区二区三区四区视频精品免费 | 欧美私模裸体表演在线观看| 国产高清不卡一区二区| 蜜桃视频一区二区| 午夜精品久久久久久久99水蜜桃 | 色偷偷88欧美精品久久久| 国产在线精品不卡| 日日欢夜夜爽一区| 又紧又大又爽精品一区二区| 久久免费精品国产久精品久久久久| 在线观看视频91| proumb性欧美在线观看| 国产精品香蕉一区二区三区| 免费黄网站欧美| 日韩精品亚洲一区| 日韩成人伦理电影在线观看| 亚洲精品精品亚洲| 亚洲蜜桃精久久久久久久| 中文字幕不卡在线播放| 亚洲国产高清不卡| 久久精品网站免费观看| 2017欧美狠狠色| 久久青草国产手机看片福利盒子| 日韩欧美亚洲国产精品字幕久久久| 日韩欧美黄色影院| 精品日韩av一区二区| 欧美成人猛片aaaaaaa| 精品久久久久久久久久久院品网 | 亚洲国产日韩一区二区| 亚洲影视在线播放| 亚洲一区二区三区美女| 一区二区三区在线看| 一区二区三区日韩| 天天av天天翘天天综合网色鬼国产 | 成人av网站在线观看免费| 处破女av一区二区| www.久久久久久久久| 91在线你懂得| 欧美日韩精品电影| 日韩欧美另类在线| 欧美国产精品专区| 亚洲卡通欧美制服中文| 亚洲v精品v日韩v欧美v专区| 麻豆精品国产传媒mv男同| 国产精品综合久久| 色婷婷国产精品久久包臀| 色综合久久久久久久久| 制服.丝袜.亚洲.中文.综合| 精品美女一区二区| 亚洲视频资源在线| 亚洲国产成人av网| 精品一区二区三区不卡| 9l国产精品久久久久麻豆| 欧美日韩在线播放三区| 久久综合久久99| 日韩不卡免费视频| 国产精品一二三| 91丝袜美女网| 日韩精品一区在线| 国产精品美女久久久久av爽李琼| 一区二区三区小说| 国产一区在线观看视频| 91美女片黄在线| 日韩精品一区二区三区在线播放 | 欧美高清性hdvideosex| 久久久久成人黄色影片| 亚洲午夜免费福利视频| 国产一区二区按摩在线观看| 欧美在线观看视频一区二区三区| 精品欧美黑人一区二区三区| 亚洲激情中文1区| 国产在线精品一区二区不卡了 | 精品国产乱码久久久久久久| 亚洲三级视频在线观看| 精品一区二区三区在线观看 | 国产经典欧美精品| 正在播放亚洲一区| 综合久久国产九一剧情麻豆| 欧美a级理论片| 日本道色综合久久| 国产日韩欧美一区二区三区综合 | 毛片基地黄久久久久久天堂| 91视视频在线观看入口直接观看www | 欧美一个色资源| 尤物视频一区二区| 成人美女视频在线观看| 日韩视频在线永久播放| 亚洲亚洲人成综合网络| 成人福利视频网站| 亚洲高清免费观看 | 国产偷v国产偷v亚洲高清| 婷婷综合五月天| 欧美性猛交xxxx黑人交| 中文字幕一区二区三区在线观看 | 国产精品第一页第二页第三页| 久久er99热精品一区二区| 欧美麻豆精品久久久久久| 国产精品二三区| 99精品国产91久久久久久| 欧美激情一区二区三区四区| 久久97超碰国产精品超碰| 日韩欧美国产一区在线观看| 日韩中文字幕亚洲一区二区va在线 | 欧美日韩亚洲综合一区二区三区| 亚洲色图色小说| 91免费观看视频| 亚洲综合色丁香婷婷六月图片| 91网站最新网址| 亚洲综合另类小说|