A 石油採集

鏈接: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

輸入

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; 
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章