鏈接:https://www.nowcoder.com/acm/contest/76/A
來源:牛客網
隨着海上運輸石油泄漏的問題,一個新的有利可圖的行業正在誕生,那就是撇油行業。如今,在墨西哥灣漂浮的大量石油,吸引了許多商人的目光。這些商人們有一種特殊的飛機,可以一瓢略過整個海面20米乘10米這麼大的長方形。(上下相鄰或者左右相鄰的格子,不能斜着來)當然,這要求一瓢撇過去的全部是油,如果一瓢裏面有油有水的話,那就毫無意義了,資源完全無法利用。現在,商人想要知道,在這片區域中,他可以最多得到多少瓢油。
地圖是一個N×N的網絡,每個格子表示10m×10m的正方形區域,每個區域都被標示上了是油還是水
輸入描述:
測試輸入包含多條測試數據 測試數據的第一行給出了測試數據的數目T(T<75) 每個測試樣例都用數字N(N<50)來表示地圖區域的大小,接下來N行,每行都有N個字符,其中符號’.’表示海面、符號’#’表示油麪。
輸出描述:
輸出格式如下“Case X: M”(X從1開始),M是商人可以最多得到的油量。
輸入
1 6 ...... .##... ...... .#..#. .#..## ......
輸出
Case 1: 3
#include<iostream> #include<string.h> #include<queue> using namespace std; #define INF 0x7f7f7f7f const int N =501; typedef long long ll ; #define f(i,l,r) for(int i=l;i<=r;++i) #define g(i,l,r) for(int i=l;i>=r;--i) int n,m; int ans; char a[N][N]; int s0,s1; void dfs(int x,int y){ if (x>=m||y>=m||x<0||y<0||a[x][y]=='.') return; (x+y)&1?++s0:++s1; a[x][y]='.'; dfs(x+1,y); dfs(x-1,y); dfs(x,y+1); dfs(x,y-1); } int main() { int t ; cin>>t; f(i,1,t) { int ans=0; cin>>m; f(j,0,m-1)cin>>a[j]; f(j,0,m-1)f(k,0,m-1)if(a[j][k]=='#') { s0=0;s1=0; dfs(j,k); ans+=min(s0,s1); } cout<<"Case "<<i<<": "<<ans<<endl; } }