Top.Mail.Ru
Ответы

ПОМОГИТЕ С ПРОГРАММИРОВАНИЕМ НА ЯЗЫКЕ ПАСКАЛЬ!!!!!

Время: 1 сек. Память: 16 Мб Сложность: 10%)
Браконьер Петрович использует распространенный незаконный способ рыбалки с использованием рыболовной сети. Но проблема в том, что крупная рыба часто рвет сеть и приходится ее восстанавливать. Однажды Петрович задумался: какое максимальное количество повреждений может быть в рыболовной сети, таких, что сеть не будет разорвана на части? Вам предстоит помочь ему в вычислениях.
Сеть имеет прямоугольную форму размером M×N узлов, все смежные узлы соединены леской. Под разрывом будем понимать только единичный обрыв лески между двумя смежными узлами сети.
Например, если сеть имеет размер 2х2, то внешний вид сети будет напоминать квадрат, где допустим только один разрыв в одном из четырех возможных соединений, т.к. любые 2 разрыва приведут к разделению сети на 2 части.
Входные данные
Первая строка входного файла INPUT.TXT содержит два целых числа M и N через пробел – размеры рыболовной сети (1 ≤ M, N ≤ 10 000).
Выходные данные
В выходной файл OUTPUT.TXT выведите максимальное число разрывов заданной сети, которые не приведут к распадению рыболовной снасти Петровича.
free pascal

По дате
По рейтингу
Аватар пользователя
1234567891011121314151617181920212223242526
 {$mode objfpc}{$H+} 
 
uses SysUtils; 
 
var 
  f: text; 
  s: string; 
  M, N: integer; 
  a: TStringArray; 
 
begin 
  Assign(f, 'INPUT.TXT'); 
  Reset(f); 
  Readln(f, s); 
  Close(f); 
  a := s.Split(' '); 
  M := a[0].ToInteger; 
  N := a[1].ToInteger; 
  if ((M >= 1) and (M <= 10000)) and ((N >= 1) and (N <= 10000)) then 
  begin 
    Assign(f, 'OUTPUT.TXT'); 
    Rewrite(f); 
    Writeln(f, (M - 1) * (N - 1)); 
    Close(f); 
  end; 
end.  
Аватар пользователя
Просветленный
12345678910111213141516171819202122232425262728293031
 program FishingNet; 
 
var 
    M, N: longint; 
    totalNodes, totalEdges, requiredEdges, maxBreaks: int64; 
 
begin 
    // Чтение входных данных 
    assign(input, 'INPUT.TXT'); 
    reset(input); 
    readln(M, N); 
    close(input); 
     
    // Подсчет общего количества узлов и лесок 
    totalNodes := M * N; 
    totalEdges := M * (N - 1) + N * ( 
(M - 1); 
 
    // Подсчет минимально необходимого количества ребер для связности 
    requiredEdges := totalNodes - 1; 
 
    // Подсчет максимального количества разрывов 
    maxBreaks := totalEdges - requiredEdges; 
 
    // Запись результата в выходной файл 
    assign(output, 'OUTPUT.TXT'); 
    rewrite(output); 
    writeln(maxBreaks); 
    close(output); 
end.