Daimayuan Online Judge-網格判斷
題目描述
您將獲得一個 \(n×n\) 的網格,網格中每個正方形的顏色為黑色或白色,如果滿足以下所有條件,則網格是正確的:
-
每行的黑色方塊數與白色方塊數相同,
-
每列的黑色正方形數與白色方塊數相同,
-
沒有行或列具有 \(3\) 個及以上相同顏色的連續正方形,
給定網格,確定它是否正確,
輸入格式
第一行一個數字 \(n\),
接下來 \(n\) 行,每行包含一個長度為 \(n\) 的由字符B和W組成的字串,代表網格正方形的顏色,
輸出格式
如果網格正確,請列印數字 \(1\) 在一行上,否則,請列印數字 \(0\) 在一行上,
樣例輸入
4
WBBW
WBWB
BWWB
BWBW
樣例輸出
1
資料范圍
\(2≤n≤24\),且 \(n\) 是偶數,
解題思路
資料范圍不大,模擬即可,分別列舉行和列,判斷每一行或列中的W和B個數是否相等,不相等直接輸出 \(0\),程式結束,同時在判斷每一行或列中的W和B個數是否相等的同時,設一個變數 \(cnt\),用于記錄連續個數,只要當前字符和前一個字符相同,就進行加一,大于等于 \(3\) 直接跳出回圈,輸出 \(0\) 即可,否則重新設定為 \(1\),
C++代碼
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 30;
int n;
char g[N][N];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for(int i = 1; i <= n; i ++)
cin >> g[i] + 1;
for(int i = 1; i <= n; i ++)
{
int cb = 0, cw = 0;
int cnt = 1;
for(int j = 1; j <= n; j ++)
{
if(j > 1)
{
if(g[i][j] == g[i][j - 1]) cnt ++;
else cnt = 1;
}
if(cnt >= 3) break;
if(g[i][j] == 'B') cb ++;
else cw ++;
}
if(cb != cw || cnt >= 3)
{
puts("0");
return 0;
}
}
for(int i = 1; i <= n; i ++)
{
int cb = 0, cw = 0;
int cnt = 1;
for(int j = 1; j <= n; j ++)
{
if(j > 1)
{
if(g[j][i] == g[j - 1][i]) cnt ++;
else cnt = 1;
}
if(cnt >= 3) break;
if(g[j][i] == 'B') cb ++;
else cw ++;
}
if(cb != cw || cnt >= 3)
{
puts("0");
return 0;
}
}
puts("1");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526843.html
標籤:其他
下一篇:牛客-劍指offer題解第一階段
