Решение задачи №58 «Проверка на симпатичность» с ACMP
Условие задачи
Рассмотрим таблицу, содержащую n строк и m столбцов, в каждой клетке которой расположен ноль или единица. Назовем такую таблицу симпатичной, если в ней нет ни одного квадрата 2 на 2, заполненного целиком нулями или целиком единицами.
Так, например, таблица 4 на 4, расположенная слева, является симпатичной, а расположенная справа таблица 3 на 3 - не является.
Задано несколько таблиц. Необходимо для каждой из них выяснить, является ли она симпатичной.
Входные данные
Первая строка входного файла INPUT.TXT содержит количество t (1 ≤ t ≤ 10) наборов входных данных. Далее следуют описания этих наборов. Описание каждого набора состоит из строки, содержащей числа n и m (1 ≤ n,m ≤ 100), и n строк, каждая из которых содержит по m чисел, разделенных пробелами. j-ое число в i+1-ой строке описания набора входных данных - элемент aij соответствующей таблицы. Гарантируется, что все aij равны либо нулю, либо единице.
Выходные данные
Для каждого набора входных данных выведите в файл OUTPUT.TXT единственную строку, содержащую слово «YES», если соответствующая таблица является симпатичной, и слово «NO» - в противном случае.
Решение на C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("input.txt");
int i,j,k,t,x,n,m;
int a[100][100];
fin>>t;
for(k=0;k<t;k++){
fin>>n>>m;
for(i=0;i<n;i++)for(j=0;j<m;j++)
fin>>a[i][j];
x=1;
for(i=0;i<n-1;i++)
for(j=0;j<m-1;j++)
if( (a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]) % 4 == 0 ) x=0;
if(x)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
Условия задач взяты с сайта acmp.ru