网址模板建站,电子商务企业网站制作,wordpress同类软件,网站建设douyanet您将获得一个 n n nn nn 的网格#xff0c;网格中每个正方形的颜色为黑色或白色。如果满足以下所有条件#xff0c;则网格是正确的#xff1a;
每行的黑色方块数与白色方块数相同。每列的黑色正方形数与白色方块数相同。没有行或列具有 3 3 3 个及以上相同颜色的连续正方…您将获得一个 n × n n×n n×n 的网格网格中每个正方形的颜色为黑色或白色。如果满足以下所有条件则网格是正确的
每行的黑色方块数与白色方块数相同。每列的黑色正方形数与白色方块数相同。没有行或列具有 3 3 3 个及以上相同颜色的连续正方形。
给定网格确定它是否正确。
输入格式
第一行一个数字 n n n 2 ≤ n ≤ 24 2≤n≤24 2≤n≤24) 并且数字 n n n 是偶数。
接下来 n n n 行每行包含一个长度为 n n n的由字符B和W组成的字符串代表网格正方形的颜色。
输出格式
如果网格正确请打印数字 1 在一行上。否则请打印数字 0 在一行上。
样例输入
4
WBBW
WBWB
BWWB
BWBW样例输出
1解题思路
关键在于状态的维护
采用三个参数来维护状态
连续色块颜色色块连续数累计黑块数量
第三个参数很好理解这里只说明前两个参数的使用
读入一个色块有一下两种情况
1与当前连续色块颜色一致色块连续数
2与当前连续色块颜色不一致修改当前连续色块颜色初始化色块连续数为 1 1 1
AC代码如下
#include iostream
#include string
using namespace std;
const int max_n 24;int n;
int row_sum, row_seq, row_status -1;
int col_sum[max_n], col_seq[max_n], col_status[max_n];int main() {for (int i 0; i max_n; i) col_status[i] -1;cin n; cin.ignore();string str;bool ans true, c;for (int i 0; i n; i) {getline(cin, str);int len str.size();if (ans) {for (int j 0; j len; j) {if (str[j] B) c 1;else c 0;row_sum c;if (row_status c) {row_seq;if (row_seq 3) {ans false;break;}}else {row_seq 1;row_status c;}col_sum[j] c;if (col_status[j] c) {col_seq[j];if (col_seq[j] 3) {ans false;break;}}else {col_seq[j] 1;col_status[j] c;}}if (row_sum ! n / 2) ans false;row_sum 0;row_seq 0;row_status -1;}}if (ans) {for (int i 0; i n; i)if (col_sum[i] ! n / 2) {ans false;break;}}cout ans endl;return 0;
}