CSU 1309 凹凸曼和小怪獸的故事 最小點對

2022-08-09 01:39:21 字數 1811 閱讀 9996

題意:給出凹凸曼和小怪獸的座標,然後求出一對最近的凹凸曼和怪獸,算出他們的距離

然後除以他們的速度之和。

坑爹:最小點對的乙個模板,就只是要判斷一下是不同種類(超人或怪獸)的點才可以計算就行了。

解法:用二分的方法做,先將x從小到大排序,然後二分找出之間最小距離,這是算出了x最近的距離,

比如這之間的點的最小距離是ans,然後我們只要把 x>=mid-ans && x<=mid+ans中的點放進另外乙個

陣列中再以y從小到大的排序再找一次之間最小距離。這樣就可以找出全部點中的最小距離。

1 #include2 #include3 #include4 #include5

using

namespace

std;67

const

int maxn = 100000 + 10;8

const

double inf = 1000000000 * 2.0;9

10struct

node node[maxn],node2[maxn];

15int

n;16

17double min(double a,double

b)18

2122

double

count(node a,node b)

2326

27double

cmpx(node a,node b)

2831

32double

cmpy(node a,node b)

3336

37double clost(int begin,int

end)

3843

else

if(node[begin].type ==node[end].type)

4447

if(begin + 2 ==end)

4856

if(node[begin+1].type !=node[end].type)

5760

if(node[begin].type != node[begin+1

].type)

6164

return

min(ans1,min(ans2,ans3));65}

66int mid = (begin + end) / 2;67

double ans = min(clost(begin,mid),clost(mid+1

,end));

68int

i;69

int cnt = 0;70

for(i=begin; i<=end; i++)

7176

}77 sort(node2,node2+cnt,cmpy);

78int

j;79

for(i=0; i)

8087

if(node2[j].type !=node2[i].type)

88 91}

92}93return

ans;94}

9596

intmain()

97108

for(i=n; i<2*n; i++)

109113 sort(node,node+n,cmpx);

114double ans = clost(0,2*n-1

);115 printf("

%.3lf\n

",ans/abs(a+b));

116}

117return0;

118 }

view code

練習1 23 練習1 30

1.練習1.23 改後的 如下 define find divisor better n a cond square a n n divides?better n a a else find divisor better n next 2 a define next 2 n if 2 n 1 n 2...

130 被圍繞的區域

題目 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的區間...

130 被圍繞的區域

1.所有包含o的邊界上的的格仔,以及它們的鄰居o都不會被包圍,暫時地將這些o標記,通過深度優先搜尋查詢這些o,最後將所有未被標記的o轉換為x class solution def solve self,board list list str none do not return anything,m...