國際大學生程式設計競賽例題 4,1遙遠的距離

2021-08-30 12:13:45 字數 1433 閱讀 1389

1,題意:y軸左右兩個點集,求它們中點的最遠距離.

2,解決:

最遠距離的兩個點必定在所有點的凸包上,點到點的最遠距離對應點相關的凸包邊到點的最遠距離.

先求出凸包點,在依次求出每條凸包邊對應的最遠點,得到乙個ans,遍歷所有的邊即可得到結果.

3,實現**:

#include

#include

using namespace std;

/*pointset:輸入的點集

ch:輸出的凸包上的點集,按照逆時針方向排列

n:pointset中的點的數目

len:輸出的凸包上的點的個數

*/struct point

;//小於0,說明向量p0p1的極角大於p0p2的極角

double multiply(point p1,point p2,point p0)

double dis(point p1,point p2)

void graham_scan(point pointset,point ch,int n,int &len)

len=top+1;

}#define min(x,y) (x < y ? x : y)

#define max(x,y) (x > y ? x : y)

//返回值點q到線段p1p2的距離

double pointtoline(point p1,point p2,point q)

if (p1.y==p2.y)

if (flag)

if (min(p1.x,p2.x)<=s.x&&s.x<=max(p1.x,p2.x))

return sqrt((q.x-s.x)*(q.x-s.x)+(q.y-s.y)*(q.y-s.y));

else

return min(sqrt((q.x-p1.x)*(q.x-p1.x)+(q.y-p1.y)*(q.y-p1.y)),sqrt((q.x-p2.x)*(q.x-p2.x)+(q.y-p2.y)*(q.y-p2.y)));

}const int maxn=200000;

point pointset[maxn];

point ch[maxn];

int n;//記錄點的個數

int len;//記錄凸包的點數

double ans;//結果

//求出兩兩點之間的最遠距離

void check(point p1,point p2)

}int main()

j=(j+1)%len;

check(ch[i],ch[j]);

check(ch[i+1],ch[j]);

check(ch[i],ch[j+1]);

check(ch[i+1],ch[j+1]);

}cout<}return 0;

}

國際大學生程式設計競賽例題 1 2 求和

題目大意 不計進製的加法,進製範圍 2到16 例如 55 67 十進位制 55 add 67 12 二進位制 110111 add 1001100 1111011 123 輸入 2 10 兩個區域,十進位制加 3 69 15 輸出 從3到6 加上 從9到15的和 解答 include using n...

國際大學生程式設計競賽例題 1 4 旅館

1,題意 字串匹配 乙個待匹配字串m 0或多個任意字元,1個任意字元 乙個驗證字串t 長度不超過50 輸出 符合條件的個數 2,思路 動態規劃 d i j 表示m的前i個字元和t的前j個字元匹配的結果.轉移方程 d i j d i 1 j 1 t j d i j d i j 1 d i 1 j t ...

國際大學生程式設計競賽例題 4,6樹

1,題意 n個節點,每個節點都有編號.k k 2 個葉子,可以組成多少這樣的樹.輔助方法 prufer code,選出標號最小的葉子點,刪除,輸出它的父親節點編號,直到剩餘兩個節點.得到乙個n 2的序列,就是prufer碼,可以證明其和樹是一一對應的.問題轉化為先從n個節點擊k個作為葉子,剩餘的n ...