【問題描述】
乙個球場c的球迷看台可容納m*n個球迷。官方想統計一共有多少球迷群體,最大的球迷群體有多少人。
球迷選座特性:同球迷群體會選擇相鄰座位,不同球迷群體選擇不相鄰的座位。(相鄰包括前後相鄰、左右相鄰、斜對角相鄰);
給定乙個m*n的二位球場,0代表該位置沒人,1代表該位置有人,希望輸出球隊群體個數p,最大的球隊群體人數q。
【輸入】
第一行,2個數字,m、n,使用英文逗號隔開。
接下來m行,每行n個數字,使用英文逗號隔開。
【輸出】
一行,2數字,p和q。
【輸入輸出樣例】
fans.in
fans.out
10,10
0,0,0,0,0,0,0,0,0,0
0,0,0,1,1,0,1,0,0,0
0,1,0,0,0,0,0,1,0,1
1,0,0,0,0,0,0,0,1,1
0,0,0,1,1,1,0,0,0,1
0,0,0,0,0,0,1,0,1,1
0,1,1,0,0,0,0,0,0,0
0,0,0,1,0,1,0,0,0,0
0,0,1,0,0,1,0,0,0,0
0,1,0,0,0,0,0,0,0,0
6,8【資料範圍】
對於100%的資料,1<=m,n<=3×103。
突然想抱怨兩句
本題為今日頭條筆試題 原來的資料範圍是100*100 然鵝老師為了尊重我們的智商放到了3000*3000加上字串
由於有乙個可惡的tle 所以本題明顯不能用裸的bfs(queue實在太慢了)
本人水平有限不會優化bfs 所以在這裡採用dfs
於是本題便轉化成了乙個不用回溯的dfs問題
那麼問題來了:咋dfs?為什麼不需要回溯???
(來自已經快忘了dfs的蒟蒻)
我們首先複習一下啥是dfs
其實就是從乙個方向搜完一整條路線再搜下一條路線
對於一般的dfs(可以參照全排列等經典例題)由於每一種情況都要考慮到所以需要回溯
但是對於本題來講並不存在「走和不走」的邏輯矛盾所以並不需要回溯
咋搜看**吧
#includeusingnamespace
std;
int m,n,cnt,tmp,maxn;//
cnt儲存有幾組 tmp儲存每組幾個 maxn儲存最多人數
char ch,map[3050][3050];//
為了防止mle以及tle把地圖存成字元 ch用來讀','
static
const
int dx[8]=,dy[8]=;//
方向陣列
inline int
read()
//讀入優化 本質上還是getchar() 注意cin會tle
void dfs(int x,int y)//
dfs x、y是橫縱座標
}return;//
八個方向都搜不到就返回下一條路
}int
main()
}//劃重點!!!
//前面我們已經提到過了m,n後面會有乙個回車
//而getchar是會讀回車的
//所以對於每乙個點我們在讀入時可以劃分成兩個部分:乙個字元(回車或逗號)+鍵值
for(int i=1;i<=m;i++)}}
printf(
"%d,%d
",cnt,maxn);
return0;
}
2018HUAS ACM暑假比賽5題解
目錄這是一道帶權並查集問題 因為只有三種種類,我們分別用0,1,2來表示,即0 1,1 2,2 0。我們需要知道x和y的關係,即需知道x和祖先xx的關係,y和祖先yy的關係,即可得x和y的關係。當x的祖先和y的祖先不同時,可知x和y的關係在前面並沒有體現,所以此話一定是真的 當x的祖先和y的祖先相同...
2018暑假集訓模擬一 Day1題解
t1準確率 題目描述 你是乙個驍勇善戰 日刷百題的oier.今天你已經在你oj 上提交了y 次,其中x次是正確的,這時,你的準確率是x y.注意 本題中,0 1 和1 1 都是既約分數.輸入格式 從檔案rate.in 中讀入資料。輸入第一行包含乙個正整數t t 5 10 5 表示資料組數.接下來t ...
2023年暑假ACM個人訓練題7 題解報告
a hdu 1060 leftmost digit 求n n的第一位數字 log10的巧妙使用 b 還需要研究一下。c hdu 1071 the area 求三個點確定的拋物線的面積,其中乙個點是頂點 d hdu 1077 catching fish 用單位圓盡可能圍住多的點 e hdu 1099 ...