В связи с этим возникла задача проверки возможности показа на этом табло определенной рекламной заставки. Заставка также, как и табло, имеет размер n строк на m столбцов. Каждая из ячеек заставки окрашена в один из четырех цветов - трех основных: красный - R, зеленый - G, синий - B и черный - .(точка).
Каждая из ячеек табло характеризуется своими цветопередаточными возможностями. Любая из ячеек табло может отображать черный цвет - это соответствует тому, что на нее вообще не подается напряжение. Также каждая из ячеек может отображать некоторое подмножество множества основных цветов. В этой задаче эти подмножества будут кодироваться следующим образом:
0 - ячейка может отображать только черный цвет;1 - ячейка может отображать только черный и синий цвета;
2 - ячейка может отображать только черный и зеленый цвета;
3 - ячейка может отображать только черный, зеленый и синий цвета;
4 - ячейка может отображать только черный и красный цвета;
5 - ячейка может отображать только черный, красный и синий цвета;
6 - ячейка может отображать только черный, красный и зеленый цвета;
7 - ячейка может отображать только черный, красный, зеленый и синий цвета.
Напишите программу, которая по описанию табло и заставки определяет: возможно ли на табло отобразить эту заставку.
После этого идет описание табло. Оно содержит n строк по m чисел, разделенных пробелами. Значения чисел описаны выше.
m,n,i,j:integer;
s:array [1..100,1..100] of char;
a:array [1..100,1..100] of integer;
flag:boolean;
f,f1:text;
begin
assign(f,'input.txt');
reset(f);
assign(f1,'output.txt');
rewrite(f1);
readln(f,n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(f,s[i,j]);
readln(f);
end;
for i:=1 to n do
begin
for j:=1 to m do
read(f,a[i,j]);
readln(f);
end;
flag:=true;
for i:=1 to n do
for j:=1 to m do
case a[i,j] of
0: if (s[i,j]='G') or (s[i,j]='R') or (s[i,j]='B')then flag:= false;
1: if (s[i,j]='G') or (s[i,j]='R') then flag:= false;
2: if (s[i,j]='R') or (s[i,j]='B')then flag:= false;
3: if (s[i,j]='R') then flag:= false;
4: if (s[i,j]='G') or (s[i,j]='B')then flag:= false;
5: if (s[i,j]='G') then flag:= false;
6: if (s[i,j]='B')then flag:= false;
end;
if flag then write(f1,'YES') else write(f1,'NO');
close(f); close(f1);
end.
Входные данные
Первая строка входного файла INPUT.TXT содержит целые числа n и m (1 ≤ n, m ≤ 100). Далее идут n строк по m символов каждая - описание заставки. Каждый из символов описания заставки принадлежит множеству {R, G, B, .} . Их значения описаны выше.После этого идет описание табло. Оно содержит n строк по m чисел, разделенных пробелами. Значения чисел описаны выше.
Выходные данные
В выходной файл OUTPUT.TXT выведите YES, если на табло возможно отобразить заставку и NO - в противном случае.
Примеры
№ |
INPUT.TXT |
OUTPUT.TXT |
1 |
3 3 |
NO |
2 |
2 3 |
YES |
Решение
varm,n,i,j:integer;
s:array [1..100,1..100] of char;
a:array [1..100,1..100] of integer;
flag:boolean;
f,f1:text;
begin
assign(f,'input.txt');
reset(f);
assign(f1,'output.txt');
rewrite(f1);
readln(f,n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(f,s[i,j]);
readln(f);
end;
for i:=1 to n do
begin
for j:=1 to m do
read(f,a[i,j]);
readln(f);
end;
flag:=true;
for i:=1 to n do
for j:=1 to m do
case a[i,j] of
0: if (s[i,j]='G') or (s[i,j]='R') or (s[i,j]='B')then flag:= false;
1: if (s[i,j]='G') or (s[i,j]='R') then flag:= false;
2: if (s[i,j]='R') or (s[i,j]='B')then flag:= false;
3: if (s[i,j]='R') then flag:= false;
4: if (s[i,j]='G') or (s[i,j]='B')then flag:= false;
5: if (s[i,j]='G') then flag:= false;
6: if (s[i,j]='B')then flag:= false;
end;
if flag then write(f1,'YES') else write(f1,'NO');
close(f); close(f1);
end.
Комментариев нет:
Отправить комментарий