題意:給出凹凸曼和小怪獸的座標,然後求出一對最近的凹凸曼和怪獸,算出他們的距離
然後除以他們的速度之和。
坑爹:最小點對的乙個模板,就只是要判斷一下是不同種類(超人或怪獸)的點才可以計算就行了。
解法:用二分的方法做,先將x從小到大排序,然後二分找出之間最小距離,這是算出了x最近的距離,
比如這之間的點的最小距離是ans,然後我們只要把 x>=mid-ans && x<=mid+ans中的點放進另外乙個
陣列中再以y從小到大的排序再找一次之間最小距離。這樣就可以找出全部點中的最小距離。
1 #include2 #include3 #include4 #include5view codeusing
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 }
練習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...