CF116B Little Pigs and Wolves 題解
阿新 • • 發佈:2021-12-21
CF116B Little Pigs and Wolves 題解
Content
有一張 \(n\times m\) 的地圖,其中,\(\texttt{P}\) 代表小豬,\(\texttt{W}\) 代表狼。如果狼的上下左右有一頭以上的小豬,那麼它會吃掉其中相鄰的任意一頭小豬(此過程不再重複)。求有多少頭小豬會被狼吃掉。
資料範圍:\(1\leqslant n,m\leqslant 10\)。
Solution
如果 \(n,m\) 的範圍很大,那麼 @123456zmy 巨佬的 \(\texttt{Dinic}\) 演算法無疑是一個絕佳的選擇。
然而,這題目中 \(n,m\) 的範圍實在小到可憐,我們為什麼不直接暴力模擬呢?如果仔細看題的話不難發現,這道題目實質上就是想問你有多少匹狼能夠吃到小豬。所以,我們可以記錄下來每一匹狼的位置,然後遍歷每個狼的上下左右是否會有小豬,有的話那麼這匹狼就能夠吃到一頭小豬,記錄答案之後輸出就好了。
Code
#include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <iostream> using namespace std; const int dx[4] = {0, 0, -1, 1}; const int dy[4] = {-1, 1, 0, 0}; int n, m, xwolf[107], ywolf[107], cnt, ans; char s[17][17]; int main() { scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++i) { scanf("%s", s[i] + 1); for(int j = 1; j <= m; ++j) if(s[i][j] == 'W') xwolf[++cnt] = i, ywolf[cnt] = j; } for(int i = 1; i <= cnt; ++i) for(int j = 0; j < 4; ++j) if(s[xwolf[i] + dx[j]][ywolf[i] + dy[j]] == 'P') { ans++; break; } printf("%d", ans); return 0; }