vvvvNikavvv
13.03.2020 06:43

С++ , Разделение королевства Разделение королевства
Королевство Флатландия имеет вид бесконечной двумерной плоскости. В королевстве находятся n замков. Для более удобного составления карт в Флатландии была введена Декартова система координат. Известно, что i-й замок находится в точке с координатами (xi+0.5, yi+0.5), где xi, yi — целые числа. Местоположения всех замков попарно различны.

На старости лет король решил разделить на карте королевство между своими сыновьями прямыми, параллельными осям координат. Если прямая параллельна оси Ox, то у-координата всех точек на прямой должна быть целым числом, иначе x-координата у всех точек должна быть целым числом. В обоих случаях соответствующие целые координаты по модулю не должны превышать 2⋅109. При этом Его величество хочет, чтобы после разделения королевства любые два замка оказались в различных частях.

королю разделить королевство, используя не более чем n−1 прямую. У любой пары прямых должно быть не более одной общей точки.

Входные данные

В первой строке задано целое число n (1≤n≤100000) — количество замков в королевстве. В следующих n строках записаны по два числа xi и yi (−109≤xi≤109, −109≤yi≤109) — целые части координат замков.

Выходные данные

В первой строке выходного файла выведите количество используемых прямых. В следующих строчках выведите сами прямые, по одной в каждой строке. Если прямая параллельна оси Ox, то выведите символ "y", а затем через пробел y-координату всех точек на этой прямой, иначе выведите символ "x", а затем через пробел x-координату всех точек на этой прямой.

Примеры
Ввод
Вывод
4
0 2
0 3
1 2
1 3
2
y 3
x 1

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
инкар03
14.01.2020 21:45
Расстояние от точки до начала координат находится как длина гипотенузы прямоугольного треугольника, катетами которого являются координаты точки. Поскольку нам нужны не сами расстояния, а лишь сравнить их, то можно сравнивать квадраты, чтобы не извлекать корня.r_i^2=x_i^2+y_i^2

// PascalABC.NET 3.0, сборка 1088
var
  x1,x2,y1,y2,r1,r2:real;
begin
  Write('Введите координаты первой точки: '); Read(x1,y1);
  Write('Введите координаты второй точки: '); Read(x2,y2);
  r1:=sqr(x1)+sqr(y1); r2:=sqr(x2)+sqr(y2);
  if r1>r2 then Writeln('Ближе вторая точка')
  else
    if r1<r2 then Writeln('Ближе первая точка')
    else Writeln('Точки равноудалены')
end.

Тестовое решение:
Введите координаты первой точки: 16.3 -11.7
Введите координаты второй точки: 15.8 12
Ближе вторая точка
0,0(0 оценок)
Ответ:
olesy1945
21.12.2020 19:10
Const Sz = 100; // Размер массива

var
a: array [1..Sz] of integer;
N: integer; // Количество элементов в массиве
i,k: integer;
min,max: real;
begin
k:=0;
N:= 10;
for i:=1 to N do begin
read(a[i]);
k:=k+a[i];
end;
write('Вывод элементов массива: ');
for i:=1 to N do
write(a[i],' ');
min := a[1];
for i:=2 to N do
if a[i]<min then
begin
min := a[i];
end;
max := a[1];
for i:=2 to N do
if a[i]>max then
begin
max := a[i];
end;
writeln('max=',max,' ','min=', min,' ','Средная температура=',k/N)
end.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота