poj 3301 三分求極值

2021-07-04 08:30:12 字數 925 閱讀 4590

引用大牛部落格內容- -#,勿噴

題目大意:

給定二維平面的n個點,要求乙個面積最小的正方形,使其能覆蓋所有的點。

解題思路:

旋轉座標系,三分法。

如果正方形兩相鄰邊是與座標軸平行的,那麼只需求出所有點的橫座標差的最大值,縱座標差的最大值,然後再求兩者的最大值,同樣的道理當正方形相鄰兩邊與座標軸不平行時,旋轉座標軸,使新的座標軸平行正方形的兩相鄰邊,然後把舊座標軸上的點的座標全部轉化到新的座標軸上,再求出橫縱座標差的最大值,取兩者的最大值即可。分析知二維空間上,對於任意正方形的位置,總能順時針旋轉座標軸0~90『 達到滿足要求。

如圖所示當座標旋轉a角度時可以求出 x1=x*cos(a)-y*sin(a);   y1=x*sin(a)+y]*cos(a);  可以證明它們都是凸性函式,故他們差的最大值也是凸性函式,故可以用三分法,對旋轉角度進行三分,求出最小的滿足要求的正方形,詳細過程見**。

注意:用c++交,g++會出問題;

#include #include #include using namespace std;

struct sa

p[35];

int n;

const double pi=acos(-1.0);

const double eps=1e-6;

double area(double a)

double cal(double z)

int main()

{ int t;

scanf("%d",&t);

while(t--)

{scanf("%d",&n);

for(int i=0;i

POJ3301最小正方形覆蓋(三分)

題意 用最小的正方形覆蓋所有的點,輸出此正方形的面積。思路 一條邊長與x軸平行的正方形,旋轉的角度與投影到x軸的長度的變化關係是乙個單峰函式,所以用三分解題,但旋轉正方形不方便,所以旋轉座標系。x a i x cos degree a i y sin degree y a i x sin degre...

三分求極值

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 這一次我們就簡單一點了,題目在此 在直角座標系中有一條拋物線y ax 2 bx c和乙個點p x,y 求點p到拋物線的最短距離d。輸入第1行 5個整數a,b,c,x,y。前三個數構成拋物線的引數,後兩個數x,y表示p點座...

三分求極值

題目傳送 hihocoder 1142 三分 三分求極值 二分適用於單調函式,對於需要逼近的區間做二等分,來求解某點的值等。三分適用於凸形函式,對於需要逼近的區間做三等分。ac include include include include include include include inclu...