2017網易內推筆試程式設計題 分田地

2021-07-16 15:50:48 字數 1680 閱讀 6080

** 

題目描述:

牛牛和 15 個朋友來玩打土豪分田地的遊戲,牛牛決定讓你來分田地,地主的田地可以看成是乙個矩形,每個位置有乙個價值。分割田地的方法是橫豎各切三刀,分成 16 份,作為領導幹部,牛牛總是會選擇其中總價值最小的乙份田地, 作為牛牛最好的朋友,你希望牛牛取得的田地的價值和盡可能大,你知道這個值最大可以是多少嗎? 

輸入描述:

每個輸入包含 1 個測試用例。每個測試用例的第一行包含兩個整數 n 和 m(1 <= n, m <= 75),表示田地的大小,接下來的 n 行,每行包含 m 個 0-9 之間的數字,表示每塊位置的價值。
輸出描述:

輸出一行表示牛牛所能取得的最大的價值。
輸入例子:

4 4

3332

3233

3332

2323

輸出例子:

2
分析:二分 + 列舉。二分答案判斷可行性。

二分範圍:0至所有田地價值和

可行性判斷(關鍵)

:假定二分值為mid。

暴力列舉豎切的位置(三重迴圈)

,然後看橫切能切多少刀

。列舉橫切時,當這部分的4個矩形(新的一橫與上面一橫之間被豎著的邊界以及豎切三刀形成的四個矩形)的價值都大於等於mid,說明這一刀切得合理,從這個位置開始繼續往下列舉橫切。

如果最終橫切的刀數大於等於4,那麼說明這個值mid是合理的,否則不合理

。通過這樣的不斷壓縮區間,最終必然能夠得到答案。

其中如何巧妙計算每個小矩形的和,也是可以通過預處理然後得到的。具體可見**。

**清單:

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

const

intmaxn = 75 + 5;  

intn, m;  

char

str[maxn];  

inta[maxn][maxn];  

intsum[maxn][maxn];  

void

input()   

}  }  

intgetarea(

intx1, 

inty1, 

intx2, 

inty2)   

bool

judge(

intmid)   

}  if

(cnt >= 4) 

return

true

;  }  

}  }  

return

false

;  }  

void

solve()   

}  int

l = 0, r = sum[n][m], mid;  

intans = 0;  

while

(l <= r)   

else

}  printf("%d\n"

, ans);  

}  int

main()   

return

0;  

}  

2017網易內推程式設計題(網格問題)

二貨小易有乙個w h的網格盒子,網格的行編號為0 h 1,網格的列編號為0 w 1。每個格仔至多可以放一塊蛋糕,任意兩塊蛋糕的歐幾里得距離不能等於2。對於兩個格仔座標 x1,y1 x2,y2 的歐幾里得距離為 x1 x2 x1 x2 y1 y2 y1 y2 的算術平方根小易想知道最多可以放多少塊蛋糕...

2023年網易有道內推程式設計題

第一題 洗牌在生活中十分常見,現在需要寫乙個程式模擬洗牌的過程。現在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張 上半堆 右手拿著第n 1張到第2n張 下半堆 接著就開始洗牌的過程,先放下右手的最後一張牌,再放下左手的最後...

2016網易筆試程式設計題

有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?每個輸入包含 1 個測試用例。每個測試資料的第一行包含乙個整數 n 1 n 50 表示學生的個數,接下...