Bzoj1185 HNOI2007 最小矩形覆蓋

2022-05-13 13:05:53 字數 2212 閱讀 3049

time limit: 10 sec  memory limit: 162 mbsec  special judge

submit: 1653  solved: 745

[submit][status][discuss]

計算幾何 vfleaking提供spj

數學問題 計算幾何 旋轉卡殼

按順序列舉凸包上每一條邊為底邊,旋轉卡殼找出此時的矩形的頂點、最左點和最右點,花式計算出邊長,求面積,記錄面積最小值和對應的解。

式子都能看懂,但不看題解就是寫不出來,沮喪。

1

/*by silvern

*/2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int inf=0x3f3f3f3f;10

const

double eps=1e-8;11

const

int mxn=100010;12

intread()

15while(ch>='

0' && ch<='9')

16return x*f;17}

18 inline int dt(double

x)22

struct

point;}

25 point operator - (point b);}

26 point operator * (double v);}

27 point operator / (double v);}

28bool

operator

< (point b)const

31 }a[mxn],p[mxn],ans[5

];32

typedef point vector;

33double dot (point a,point b)

34double

cross(point a,point b)

37double

dist(point a,point b)

40double

len(point a)

43double

dlc(point p,point a,point b)

47int

n;48

double ans=0;49

int st[mxn],top=0,t2=0;50

void

andrew()

56 t2=top;

57for(int i=n-1;i;i--)

61if(n>1)t2--;

62 n=t2;

63for(int i=1;i<=n;i++)

66return;67

}68void

solve();//

v逆時針轉90度

89 ans[1]=a[i]+v*dot(a[r]-a[i],v);

90 ans[2]=a[i]+v*dot(a[l]-a[i],v);

91 ans[3]=ans[2]+u*h;

92 ans[4]=ans[1]+u*h;93}

94}95return;96

}97intmain()

104andrew();

105/*

printf("n:%d\n",n);

106for(i=1;i<=n;i++)

*/109

solve();

110int pos=1

;111

for(i=1;i<=4;i++)

116if(ans0

;117 printf("

%.5f\n

",ans);

118for(i=pos;i<=4;i++)

119 printf("

%.5f %.5f\n

",ans[i].x,ans[i].y);

120for(i=1;i)

121 printf("

%.5f %.5f\n

",ans[i].x,ans[i].y);

122return0;

123 }

BZOJ1185 HNOI2007 最小矩形覆蓋

題目描述 給定一些點的座標,要求求能夠覆蓋所有點的最小面積的矩形,輸出所求矩形的面積和四個頂點座標 輸入輸出格式 輸入格式 第一行為乙個整數n 3 n 50000 從第2至第n 1行每行有兩個浮點數,表示乙個頂點的x和y座標,不用科學計數法 輸出格式 第一行為乙個浮點數,表示所求矩形的面積 精確到小...

bzoj1185 HNOI2007 最小矩形覆蓋

time limit 10 sec memory limit 162 mbsec special judge submit 1945 solved 853 submit status discuss 分析 有乙個比較顯然的結論 最小的矩形一定有一條邊在凸包上.利用旋轉卡殼求出對應邊的最遠點.這兩個是...

狡猾的商人 bzoj1202,HNOI2005

ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...