在二維座標中,有n個點,要求在x軸上某點為圓心,d為半徑,能覆蓋這些點,求需要這樣的幾個圓。如果無法完全覆蓋輸出-1
思路:
我們可以逆向思考,如果以二維座標上的點p(x,y)為圓心,d為半徑,則有兩個點經過x軸,那兩個點即為x軸上能覆蓋到p的最近點和最遠點,如圖
在xmin和xmax之間的任意x為圓心肯定都能覆蓋到p點。那問題就轉換成了任意pi的xmin和xmax比較的問題。
(1)判斷這些點y是否在d的範圍內,如果超出肯定不能 完全覆蓋
(2)求出這些點的的xmin和xmax,然後以xmin從小到大進行排序
(3)如果p1.xmax
如果p1.xmax>p2.max,代表兩點能在乙個圓內覆蓋,但是最遠距離 xmax更新了,變成了p2.xmax
就這樣,這題就差不多能夠解決了,接下來不懂的看看的**,仔細想想就能想清楚了。
#include #include #include using namespace std;
#define max 1001
struct tpoint
;struct tseg
;tpoint point[max];
tseg seg[max];
void input(int n);
bool judge(int n,int d);
void vsort(int n);
bool vcmp(const tseg &a,const tseg &b);
int getnum(int n);
void vout(int nc,int out);
int main()
input(nnum); //輸入點
if(judge(nnum,ndis)==true)
else
vout(ncase,ans);//輸出
ncase++;
}return 0;
}void input(int n)
}bool judge(int n,int d)
seg[i].tmin=point[i].x-sqrt(1.0*d*d-1.0*point[i].y*point[i].y);
seg[i].tmax=point[i].x+sqrt(1.0*d*d-1.0*point[i].y*point[i].y);
}return true;
}void vsort(int n)
bool vcmp(const tseg &a,const tseg &b)
}return ret;
}void vout(int nc,int out)
{ cout<
城市公交網建設問題
問題描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使得工程的總造價最少?輸入格式 n 城市數,1 n 100...
1348 例4 9 城市公交網建設問題
有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使得工程的總造價最少?n 城市數,1 n 100 e 邊數 以下e行...
1348 例4 9 城市公交網建設問題
題目描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使得工程的總造價最少?輸入 n 城市數,1 n 100 e...