Вопрос задан 23.06.2023 в 11:09. Предмет Информатика. Спрашивает Скрипченко Дана.

B. Гости Вася переехал из своего родного города и очень скучает по старым друзьям. К сожалению,

Вася снимает маленькую квартиру и одновременно в гости к нему может приехать только один друг. Каждый друг сказал Васе два числа A и B - с какого по какой день он может приехать в гости. Каждый друг приезжает и уезжает в полдень. Каждый друг может приехать к Васе только один раз и остаться у него на несколько дней. Вася хотел бы, чтобы суммарное количество дней, когда у него в гостях есть кто-нибудь из друзей, было максимальным. Помогите ему определить даты приезда для каждого из друзей так, чтобы они не пересекались (допустима ситуация, что в один день один из друзей приезжает, а другой - уезжает) и суммарное время, когда у Васи в гостях есть кто-то из друзей, было максимальным. Формат ввода В первой строке записаны целое число N (1 ≤ N ≤ 100000) - количество друзей Васи. В следующих N строках записано по два целых числа Ai и Bi (оба числа от 1 до 109) - возможное время приезда i-го друга. Формат вывода Выведите N пар чисел Li и Ri - номера дней, в которые приедет и уедет i-й друг соответственно (Ai ≤ Li ≤ Ri ≤ Bi). Если i-го друга приглашать не нужно, выведите пару чисел -1 -1. Если правильных ответов несколько - выведите любой из них.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Стрельников Славик.

Ответ:

Объяснение:

#include <iostream>

#include<vector>

#include <algorithm>

using namespace std;

int main() {

ios::sync_with_stdio(false);

int N, A, B;

cin >> N;

vector < vector <int>> IO;

int lastDay = 0;

for (int i = 0; i <  N; i++) {

 cin >> A >> B;

 IO.push_back(vector<int>());

 IO[i].push_back(A);

 IO[i].push_back(B);

 IO[i].push_back(i);

}

sort(IO.begin(), IO.end());

for (int i = 0; i < N; i++)

{

 if (lastDay >= IO[i][1]) {

  IO[i][0] = -1;

  IO[i][1] = -1;

 }

 else {

  if (lastDay < IO[i][0]) {

   lastDay = IO[i][1];

  }

  else if (lastDay >= IO[i][0]) {

   IO[i][0] = lastDay+1;

   lastDay = IO[i][1];

  }

 }

}

for (int i = 0; i < N; i++) {

 for (int j = 0; j < N; j++) {

  if (IO[j][2] == i) {

   cout << IO[j][0] << " " << IO[j][1] << endl;

   break;

  }

 }

}

return 0;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи мы можем воспользоваться жадным методом.

  1. Сначала отсортируем всех друзей по дате приезда в порядке возрастания.
  2. Заведем переменную current_day, которая будет представлять текущий день.
  3. Для каждого друга по порядку: a. Если день приезда друга (Ai) больше, чем текущий день, то это идеальный день для его приезда. Устанавливаем Li равным Ai и Ri равным Bi, а также обновляем текущий день (current_day = Bi + 1). b. Если день приезда друга (Ai) меньше или равен текущему дню, то друг не может приехать в этот день, и мы проверяем следующий доступный день для его приезда, увеличивая current_day до Ai. После этого снова выполняем шаг 3a.

Вот Python-код, который решает задачу:

python
# Ввод данных n = int(input()) friends = [] for i in range(n): a, b = map(int, input().split()) friends.append((a, b, i + 1)) # Сортировка друзей по дате приезда friends.sort() current_day = 1 result = [] for friend in friends: a, b, i = friend if a > current_day: result.append((a, b)) current_day = b + 1 else: next_day = max(current_day, a) if next_day <= b: result.append((next_day, b)) current_day = b + 1 else: result.append((-1, -1)) # Вывод результата for l, r in result: print(l, r)

Этот код сначала сортирует друзей по дате приезда, затем использует жадный метод для определения дат приезда и отъезда каждого друга, учитывая условия задачи.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос