У игрока в космической стрелялке есть очень мощная лазерная пушка. Но она неподвижна и может стрелять только в одном направлении. Игрок может расставить на игровом поле двусторонние зеркала, меняющие ход луча, чтобы поражать врагов. Введём декартову систему координат с центром, где расположена пушка, то есть пушка имеет координаты (0; 0). Пушка стреляет в направлении точки (1; 1). Игрок может поставить зеркала в точках с целочисленными координатами. Зеркала могут быть горизонтальными или вертикальными, попадание луча в зеркало меняет траекторию луча по законам отражения света. Некоторые возможные варианты отражения луча от зеркала изображены на рисунке.
Вам необходимо расставить минимальное количество зеркал так, чтобы лазерный луч поразил цель.
Входные данные Программа получает на вход два целых числа X и Y, не превосходящих по модулю 10000, записанные в разных строках — координаты цели. Точка (X; Y) не совпадает с началом координат.
Выходные данные Программа должна вывести в первой строке число N — необходимое количество зеркал.
Следующие N строк должны содержать информацию о каждом зеркале. В i-й строке должны быть записаны через пробелы два целых числа xi и yi и один символ ti, обозначающие координаты (xi; yi) точки, в которых установлено i-е зеркало, и тип этого зеркала ti. Если ti является символом «V», то i-е зеркало размещено вертикально, если же ti является символом «H», то зеркало размещено горизонтально. Например, строка «-2 5 H» обозначает горизонтальное зеркало в точке (-2; 5). Зеркала можно выводить в любом порядке. Зеркало нельзя размещать в точке (0; 0), также нельзя размещать два зеркала в одной точке. Значения xi и уi не должны по модулю превосходить 100000. Также, разумеется, нельзя допустить, чтобы отражённый луч попал в пушку.
Если вариантов ответа несколько, выведите любой из них.
Если поразить цель в соответствии с условиями задачи невозможно, программа должна вывести одно число «-1».
Если для поражения цели зеркала не нужны, программа должна вывести одно число «0».
Самые первые современные компьютеры - к числу которых относится Марк-1 - были основаны на электромеханических переключателях, которые широко применялись тогда в технике телефонной связи. Когда переключатель открыт (слева), ток в цепи отсутствует. Но если на обмотку железного сердечника (справа) подать ток низкого напряжения (красный), то в сердечнике создается магнитное поле, притягивающее один конец вращающегося на шарнире рычажка; другой его конец в этот момент сжимает контакты: цепь замыкается и по ней начинает проходить электрический ток (зеленый). Разработка машины Марк-1 проходила на удивление гладко. Успешно пройдя первые испытания в начале 1943 г., она была затем перенесена в Гарвардский университет, где стала яблоком раздора между ее изобретателем и его шефом.
Следует заметить, что и Эйкен, и Уотсон, обладая немалым упрямством, любили делать все по-своему. Сначала они разошлись во мнениях относительно внешнего вида машины.Марк-1, достигавший в длину почти 17 м и в соту более 2,5 м, содержал около 750 тыс. деталей, соединенных проводами общей протяженностью около 800 км. Для инженера такая махина была поистине кошмарным сном. Эйкен хотел оставить внутренности машины открытыми, чтобы специалисты имели возможность видеть ее устройство. Уотсон же, которого, как всегда, больше беспокоила репутация фирмы IBM, настаивал, чтобы машину заключили в корпус из стекла и блестящей нержавеющей стали.
Уотсон вышел победителем в спорах по этому и другим вопросам, но, когда Марк-1 был «представлен» прессе в августе 1944 г., Эйкен взял реванш. Он вскользь упомянул о роли, которую сыграла в этом проекте корпорация IBM, а лично о Томасе Уотсоне вообще не сказал ни слова. Уотсон был в бешенстве. «Вы не смеете так пренебрежительно относиться к IBM! - кричал он Эйкену. - Для меня IBM значит не меньше, чем для вас, выпускников Гарварда, ваш университет!» Сын и преемник Уотсона Том Уотсон-младший говорил позже: «Имей Эйкен и отец под рукой пистолеты, они бы убили друг друга».
Program SandP; //Название программы var //Описание переменных x,y: real; // Стороны прямоугольника S: real; // Площадь прямоугольника P: real; // Периметр прямоугольника procedure RectSP(a,b: real; var S,P:real); //Процедура begin S := a * b; //Нахождение площади P := a + b; //Нахождение суммы end; begin //Начало основной части программы writeln('Введите стороны прямоугольника: '); //Диалог с пользователем readln(x,y); //Считывание сторон RectSP(x,y,S,P); //Вызов процедуры writeln('Площадь равна ',S); //Вывод площади writeln('Периметр равен ',P); //Вывод периметра end. //Конец программы
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку