В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
Макс528103
Макс528103
02.02.2021 15:01 •  Информатика

Сов по информатике 6 класс 3 четверть много желательно с ответами​

Показать ответ
Ответ:
dasha1949
dasha1949
26.08.2021 22:37
Из небольших ускорений можно предложить проверять до b[c], дальше всё равно ничего нет. Но всё равно алгоритм будет делать порядка n^2 операций, что при n = 10^5 достаточно много. Кстати, 2*10^9 еще помещается в longint, int64 не нужен.

Можно пойти другим путём. Отсортируем массив A[i] за n log n, а потом для того, чтобы определить уникальные элементы, достаточно одного прохода по массиву.
Я буду сортировать сортировкой слиянием, вы можете использовать любую другую достаточно быструю сортировку.

procedure merge(var a: array of longint; left1, right1, left2, right2: integer);
var
  temp: array of longint;
  i, j, k: integer;
 
begin
  setLength(temp, right1 - left1 + right2 - left2 + 2);
  i := left1;
  j := left2;
  k := 0;
  while (i <= right1) and (j <= right2) do
  begin
    if a[i] <= a[j] then
    begin
      temp[k] := a[i];
      inc(i);
    end else begin
      temp[k] := a[j];
      inc(j);
    end;
    inc(k);
  end;
  while i <= right1 do
  begin
    temp[k] := a[i];
    inc(k);
    inc(i);
  end;
  while j <= right2 do
  begin
    temp[k] := a[j];
    inc(k);
    inc(j);
  end;
  for i := left1 to right1 do
    a[i] := temp[i - left1];
  for j := left2 to right2 do
    a[j] := temp[j - left2 + right1 - left1 + 1];
end;
 
procedure mergeSort(var a: array of longint; left, right: integer);
var
  t: longint;
 
begin
  if right - left = 0 then exit;
  if right - left = 1 then
  begin
    if a[left] > a[right] then
    begin
      t := a[left];
      a[left] := a[right];
      a[right] := t;
    end;
    exit;
  end;
  mergeSort(a, left, (left + right) div 2);
  mergeSort(a, (left + right) div 2 +  1, right);
  merge(a, left, (left + right) div 2, (left + right) div 2 + 1, right);
end;
 
var
  a: array of longint;
  i, n, count: integer;
 
begin
  read(n);
  setLength(a, n);
  for i := 0 to n - 1 do
    read(a[i]);
  mergeSort(a, 0, n - 1);
  count := 1;
  for i := 1 to n - 1 do
    if a[i] <> a[i - 1] then
      inc(count);
  writeln(count);
end.
0,0(0 оценок)
Ответ:
iLFid
iLFid
24.05.2021 09:07
80 Мб = 5 * 2^4 Мб = 5 * 2^14 Кб = 5 * 2^24 байт = 5 * 2^27 бит

На то, чтобы передать этот файл из пункта Б в пункт В, необходимо потратить 5 * 2^27 / 2^20 = 5 * 2^7 = 640 секунд

Так как вся передача заняла 13 минут = 780 секунд, то данные из пункта Б в пункт В начали передавать через 780 - 640 = 140 секунд после начала передачи из пункта А (это не противоречит условию, "затем" определяет только порядок, а не то, что из пункта Б в пункт В начали передавать сразу же, как в пункт Б пришёл первый бит от А).
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота