На любом языке.
недавно глеб всерьёз озаботился проблемами экологии: кругом говорят о потеплении, тоннах пластика в океанах, нехватке ресурсов. «современные проблемы требуют современных
решений», — подумал он. поэтому, не желая дальше загрязнять воздух выхлопами своего автомобиля «волга», глеб прикупил себе новенький электрокар от компании tesla. при этом он узнал, что
без подзарядки такое средство передвижения может проехать лишь k километров.
глеб живёт в стране, где n городов и m двухсторонних дорог, их соединяющих. дорога с номером
i связывает города pi и qi и имеет длину ri километров. в дорожной сети нет дорог, соединяющих
город с самим собой, а между двумя разными может быть не более одной дороги. глеб
живёт в городе под номером u, где воздух кажется ему слишком . так что с детства
его главная мечта — переехать в город v. и если на своей старенькой «волге» наш герой никак не
мог добраться до конечного пункта, то теперь, когда у него есть новенький электрокар, он всерьёз
намерен осуществить свою мечту.
так как электрокары появились относительно недавно, заправки для них есть пока только в
l городах: a1, a2, . . , al
. глеб просит в осуществлении своей мечты, так что вам предстоит
узнать, сможет ли он добраться до города v, и если да, то какое наименьшее количество раз придётся
заправиться. когда глеб садится в машину в городе u, она уже полностью заряжена. оказавшись в
городе с заправкой, глеб может как использовать её, так и проигнорировать.
формат входных данных
первая строка содержит пять целых чисел: k — сколько километров может проехать электрокар
без подзарядки, n — количество городов, m — количество дорог, u — номер города глеба, и v — номер
города, куда хочет добраться глеб (1 6 k 6 500, 2 6 n 6 10 000, 0 6 m 6 10 000, 1 6 u, v 6 n, u 6= v).
в следующих m строках дороги. в i-й из этих строк записаны три целых числа pi
,
qi и ri — номера двух городов, которые соединяет очередная двухсторонняя дорога, и её длина
(1 6 pi
, qi 6 n, 1 6 ri 6 109
).
следующая строка содержит целое число l — количество заправок (0 6 l 6 n). наконец, последняя строка содержит l целых чисел a1, a2, . . , al — номера городов с заправками в порядке возрастания (1 6 a1 < a2 < . . < al 6 n).
формат выходных данных
выведите «-1» (без кавычек), если невозможно доехать от города с номером u до города с
номером v, или минимальное количество заправок, если это возможно.
begin
var a:=MatrixRandom(7,7,0,9);
var k:=0;
for var i:=0 to 6 do begin
for var j:=0 to 6 do begin
Write(a[i,j]:3);
if a[i,j] in [1..5] then Inc(k)
end;
Writeln
end;
Writeln('Кол-во элементов на [1,5]: ',k)
end.
Тестовое решение:
2 1 7 3 3 2 7
9 2 9 2 0 5 5
4 2 6 9 4 6 0
1 0 3 5 4 5 9
6 3 6 0 2 0 8
0 8 4 3 2 1 8
6 0 4 4 5 4 0
Кол-во элементов на [1,5]: 27
Вариант "совсем для школы"
const
n=7;
var
a:array[1..n,1..n] of integer;
i,j,k:integer;
begin
Randomize;
k:=0;
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=Random(10);
Write(a[i,j]:3);
if a[i,j] in [1..5] then Inc(k)
end;
Writeln
end;
Writeln('Кол-во элементов на [1,5]: ',k)
end.
// PascalABC.Net 3.0, сборка 1064
const
k = 100;
var
s, wd: string;
i, j, m, n, pt, step: integer;
Words, WordsSort: array[1..k] of string;
InOrder: boolean;
begin
Write('Введите строку: '); Readln(s);
n := Length(s); pt := 1; m := 0;
repeat
// Пропускаем все символы до первого непробельного
while pt <= n do
if Ord(s[pt]) <= 32 then Inc(pt) else break;
if pt <= n then begin
// Выделяем очередное слово
wd := '';
while pt <= n do
if Ord(s[pt]) > 32 then begin wd := wd + s[pt];Inc(pt) end
else break;
if wd <> '' then begin Inc(m);Words[m] := wd end
end
until pt > n;
// Теперь Words содержит все m слов.
// Отсортируем их в массиве WordsSort методом Шелла
for i := 1 to m do WordsSort[i] := Words[i];
step := m div 2;
while step > 0 do begin
for j := m - step downto 1 do begin
i := j;
while i <= m - step do begin
if WordsSort[i] > WordsSort[i + step] then begin
wd := WordsSort[i];
WordsSort[i] := WordsSort[i + 1];
WordsSort[i + 1] := wd
end;
i := i + step
end
end;
step := step div 2
end;
// Осталось поэлементно сравнить оба массива
InOrder := true; i := 1;
while InOrder and (i <= m) do
begin InOrder := (Words[i] = WordsSort[i]); Inc(i) end;
if m = 0 then Writeln('Строка не содержит слов')
else
if InOrder then Writeln('Cлова упорядочены')
else Writeln('Cлова не упорядочены')
end.
Тестовое решение:
Введите строку: слово1 слово2 слово3 слово4 слово5
Cлова упорядочены
Введите строку: слово1 слово2 слово4 слово3 слово5
Cлова не упорядочены
"Современный" вариант решения на Паскале:
// PascalABC.Net 3.0, сборка 1064
var
s:string;
begin
Write('Введите строку: '); Readln(s);
var Delim:=Range(0,32).Select(x->Chr(x)).ToArray;
var Words:=s.Split(Delim).Where(x->x<>'');
var WordsSort:=Words.Sorted;
if Words.SequenceEqual(WordsSort) then Writeln('Cлова упорядочены')
else Writeln('Cлова не упорядочены')
end.
Тестовое решение совпадает с вышеприведенным.