2018 8 16 題解 2018暑假集訓之球迷

2022-05-08 20:30:10 字數 1793 閱讀 6850

【問題描述】

乙個球場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(可以參照全排列等經典例題)由於每一種情況都要考慮到所以需要回溯

但是對於本題來講並不存在「走和不走」的邏輯矛盾所以並不需要回溯

咋搜看**吧

#includeusing

namespace

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 ...