Сайт Льва Волкова
  
Мы всегда любим тех, кто восхищается нами, но не всегда любим тех, кем восхищаемся мы. Ф.Ларошфуко
 
      На главную  
 Личное
  Статьи
  Задачи 
 Ссылки
 АТ-531
www.levvol.ru    
 

Муниципальный этап Всероссийской олимпиады по информатике. Московская область. 29 ноября 2009 г.

Задача 2. Шахматы.

Оценка 25 баллов.

На бумажном шахматном поле размером 8Х8 начертили по линиям клеток две фигуры в виде прямоугольников, при этом кусочек, который попал в обе прямоугольные фигуры, был выброшен. Таким образом, получили две фигуры (возможно, не прямоугольные).

Напишите программу, определяющую общее количество черных клеток в двух полученных фигурах. Левую нижнюю клетку шахматного поля считать черной.

Формат входных данных

С клавиатуры вводятся 4 целых числа через пробел: (x1,y1) и (x2,y2) — координаты клеток левого нижнего и правого верхнего углов первого прямоугольника. Левая нижняя клетка шахматного поля имеет координату (1,1), ось x направлена вправо, ось y — вверх.

На следующей строке в таком же формате задаются координаты второго прямоугольника.

Формат выходных данных

Вывести на экран одно число — количество черных клеток в получившихся двух фигурах.

Пример входных и выходных данных

Ввод Вывод
2 2 4 4
4 3 5 5
6
1 1 2 2
3 5 7 8
12

Рисунок к примеру 1.

Ршение

Отметим следующие факты:

  • Сумма координат черных клеток — четное число;
  • Если клетки, попадающие внуть прямоугольников заполнять 1, то клетики принадлежащие и тому, и другому прямоугольникам будут заполнены 2, т.е. будут посчитаны дважды.


Program OlimpTask2;
Uses CRT;
Var
{координаты вершин прямоугольников}
x1,y1,x2,y2,x3,y3,x4,y4:integer;
i,j,s:integer;
x: array [1..8,1..8] of integer;
Begin
ClrScr;
s:=0;
{Обнуление массива}
for i:=1 to 8 do
for j:=1 to 8 do x[i,j]:=0;
{Ввод данных}
write('x1,y1,x2,y2='); readln(x1,y1,x2,y2);
write('x3,y3,x4,y4='); readln(x3,y3,x4,y4);
{Сумма координат черной клетки - четное число.
Подсчет числа черных клеток
Суммирование 1 в черных клетках}

for i:=y1 to y2 do
for j:=x1 to x2 do
if (i+j) mod 2=0 then begin
inc(s); x[i,j]:=x[i,j]+1;
end;
{Тоже для второго прямоугольника}
for i:=y3 to y4 do
for j:=x3 to x4 do
if (i+j) mod 2=0 then begin
inc(s); x[i,j]:=x[i,j]+1;
end;
{Если черная клетка посчитана дважды,
то она исключается из суммы s}

for i:=1 to 8 do
for j:=1 to 8 do
if x[i,j]=2 then dec(s,2);
{Вывод результата}
writeln('s=',s);
readln
End.





Скачать эту программу

<<<Задача 1 | Назад |  Задача 3 >>>