洛谷P2038 无线网络发射器选址
題目描述
隨著智能手機(jī)的日益普及,人們對(duì)無(wú)線網(wǎng)的需求日益增大。某城市決定對(duì)城市內(nèi)的公共場(chǎng)所覆蓋無(wú)線網(wǎng)。
假設(shè)該城市的布局為由嚴(yán)格平行的 \(129\) 條東西向街道和 \(129\) 條南北向街道所形成的網(wǎng)格狀,并且相鄰的平行街道之間的距離都是恒定值$ 1$。東西向街道從北到南依次編號(hào)為 \(0,1,2...128\)和\(0,1,2…128\),南北向街道從西到東依次編號(hào)為$ 0,1,2…128$。
東西向街道和南北向街道相交形成路口,規(guī)定編號(hào)為 \(x\) 的南北向街道和編號(hào)為 \(y\) 的東西向街道形成的路口的坐標(biāo)是$ (x, y)$。在某些路口存在一定數(shù)量的公共場(chǎng)所。
由于政府財(cái)政問(wèn)題,只能安裝一個(gè)大型無(wú)線網(wǎng)絡(luò)發(fā)射器。該無(wú)線網(wǎng)絡(luò)發(fā)射器的傳播范圍是一個(gè)以該點(diǎn)為中心,邊長(zhǎng)為 $2d $的正方形。傳播范圍包括正方形邊界。
現(xiàn)在政府有關(guān)部門(mén)準(zhǔn)備安裝一個(gè)傳播參數(shù)為 $d $的無(wú)線網(wǎng)絡(luò)發(fā)射器,希望你幫助他們?cè)诔鞘袃?nèi)找出合適的路口作為安裝地點(diǎn),使得覆蓋的公共場(chǎng)所最多。
輸入格式
第一行包含一個(gè)整數(shù)$ d$,表示無(wú)線網(wǎng)絡(luò)發(fā)射器的傳播距離。
第二行包含一個(gè)整數(shù) \(n\),表示有公共場(chǎng)所的路口數(shù)目。
接下來(lái) n 行,每行給出三個(gè)整數(shù)$ x, y, k,\(中間用一個(gè)空格隔開(kāi),分別代表路口的坐標(biāo)\) (x, y)$ 以及該路口公共場(chǎng)所的數(shù)量。同一坐標(biāo)只會(huì)給出一次。
輸出格式
輸出一行,包含兩個(gè)整數(shù),用一個(gè)空格隔開(kāi),分別表示能覆蓋最多公共場(chǎng)所的安裝地點(diǎn)方案數(shù),以及能覆蓋的最多公共場(chǎng)所的數(shù)量。
輸入輸出樣例
輸入 #1 復(fù)制
1
2
4 4 10
6 6 20
輸出 #1 復(fù)制
1 30
說(shuō)明/提示
對(duì)于\(100%\)的數(shù)據(jù),\(1 \leq d \leq 20, 1 \leq n \leq 20,0 \leq x \leq 128 , 0 \leq y \leq 128 , 0 < k \leq 1000000,1≤d≤20,1≤n≤20,0≤x≤128,0≤y≤128,0<k≤1000000\)
解析:
一道簡(jiǎn)單的模擬題。
因?yàn)槭?span id="ozvdkddzhkzd" class="math inline">\(129 \times 129\)的方陣,所以我們可以枚舉每一個(gè)點(diǎn)
然后以該點(diǎn)為中心開(kāi)始對(duì)四周可以掃到的點(diǎn)累加和
我們開(kāi)了兩個(gè)變量來(lái)記錄,
\(num\)記錄最大值的個(gè)數(shù),\(ans\)記錄最大值,
有一個(gè)顯然的結(jié)論就是
我們更換最大值的時(shí)候就可以把num替換為1
與此值相同或者更大的數(shù)一定會(huì)在后面。
感性理解。
#include <cstdio> #include <iostream> #include <cmath> #include <algorithm> #include <cstring> #include <queue> #include <stack> #include <vector> #include <set> #define re register #define Max 130 int n,ans = 0,d,g[Max][Max],num; inline void init() {scanf("%d%d",&d,&n);int x,y,k;for(re int i = 1 ; i <= n ; ++ i)scanf("%d%d%d",&x,&y,&k),g[x][y] = k; } void work() {int max_place;for(re int i = 0 ; i <= 128 ; ++ i)for(re int j = 0 ; j <= 128 ; ++ j) {max_place = 0;for(re int a = -d ; a <= d ; ++ a)for(re int b = -d ; b <= d ; ++ b)if(a + i >= 0 && a + i <= 128 && b + j <= 128 && b + j >= 0)//判斷邊界情況max_place += g[a+i][b+j];if(max_place == ans) num++;if(max_place > ans) ans = max_place, num = 1;} } inline void print() {printf("%d %d",num,ans);} int main() {init();work();print();return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/handsomegodzilla/p/11442907.html
總結(jié)
以上是生活随笔為你收集整理的洛谷P2038 无线网络发射器选址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 何时使用构造函数,构造函数使用new关键
- 下一篇: golang的time包:时间字符串和时