Другие языки программирования и технологии

решение задачи на python, c++, java

Глеб обожает шоппинг. Как-то раз он загорелся идеей подобрать себе майку и штаны так, чтобы выглядеть в них максимально стильно. В понимании Глеба стильность одежды тем больше, чем меньше разница в цвете элементов его одежды.

В наличии имеется N (1 ≤ N ≤ 100 000) маек и M (1 ≤ M ≤ 100 000) штанов, про каждый элемент известен его цвет (целое число от 1 до 10 000 000). Помогите Глебу выбрать одну майку и одни штаны так, чтобы разница в их цвете была как можно меньше.

Входные данные
Сначала вводится информация о майках: в первой строке целое число N (1 ≤ N ≤ 100 000) и во второй N целых чисел от 1 до 10 000 000 — цвета имеющихся в наличии маек. Гарантируется, что номера цветов идут в возрастающем порядке (в частности, цвета никаких двух маек не совпадают).

Далее в том же формате идёт описание штанов: их количество M (1 ≤ M ≤ 100 000) и в следующей строке M целых чисел от 1 до 10 000 000 в возрастающем порядке — цвета штанов.

Выходные данные
Выведите пару неотрицательных чисел — цвет майки и цвет штанов, которые следует выбрать Глебу. Если вариантов выбора несколько, выведите любой из них.
ну просто 4 вложенных цикла, 2 если использовать форич, запоминаешь миниум и оба числа в конце выводишь
int min=10000000;
for (int i1=1; i1<=N; i1++) for (int i2=1; i2<=N; i2++) for (int i3=1; i3<=M; i3++) for (int i4=1; i4<=M; i4++)
if (abs(майки [i1][i2] - штаны [i3][i4]) < min) {m=майки [i1][i2]; n=штаны [i3][i4]; min=abs(майки [i1][i2] - штаны [i3][i4]);};
Д*
Дмитрий ******
17 648
Лучший ответ
#Python:

N=int(input("N=?\b"));print("> ",end='')

n=input().split(' ')

n=[int(n[k]) for k in range(N)]

M=int(input("M=?\b"));print("> ", end='')

m=input().split(' ')

m=[int(m[k]) for k in range(M)]

min=1000000000

for k in range(N):

..for l in range(M):

....r=abs(n[k]-m[l])

....if r<min:

..~~..min=r;mink=k;minl=l

print(n[mink],m[mink])

# N- количество фасонов маек, n- список маечных цветов длины N, M- количество фасонов штанов, m- список их цветов длины M, а .. и ~~ это пробелы!
DM
Denis Melnicin
28 648
Denis Melnicin print(n[mink],m[minl])
так, как входные данные уже упорядочены, то:
#include <iostream>
#include <vector>

int main() {
  // вводим данные
  size_t N, M;

  std::cin >> N;
  std::vector v1(N);
  for(size_t i =0; i < N; i++){
    std::cin >> v1[i];
   }

  std::cin >> M;
  std::vector v2(M);
  for(size_t i =0; i < N; i++){
    std::cin >> v2[i];
   }
// само решение
  struct {
    int diff;
    size_t idx1, idx2;
  } m = {10000000, 0, 0}; // минимум

  size_t i1 = 0, i2 = 0; // индексы
  while (i1 < M && i2 < N) {
    if (abs(v1[i1] - v2[i2]) < m.diff)
      m = { abs(v1[i1] - v2[i2]), i1, i2 };
    (v1[i1] < v2[i2]) ? ++i1 : ++i2;
  }
  std::cout << m.idx1 << " " << m.idx2;
  return 0;
}