Задача A. Город перекрёстков Вы разрабатываете навигатор для одного города. Этот город разбит улицами на квадратные кварталы, причём движение по любому из отрезков улицы в пределах каждого квартала строго одностороннее. С каждого перекрёстка можно выехать только в разрешённых знаками направлениях. Требуется по прилагаемой карте города с указанными на ней разрешёнными направлениями перемещения проложить самый короткий маршрут из точки AA в точку BB.
Формат входных данных
На вход подаётся карта перекрёстков города. В первой строке содержатся два числа NN — число кварталов с севера на юг и MM — число кварталов с запада на восток (1 ≤ n ≤ 50). Точка AA самая северо-западная, точка BB самая юго-восточная. Далее в 2*N+12∗N+1 строках содержится описание разрешённых направлений движения. Улицы города запад-восток описаны в нечётных строках. В каждой такой строке содержится по MM символов без пробела, указывающих разрешённое движение на соответствующем участке. В чётных строках содержится описание улиц север-юг. В этих строках содержится по M+1M+1 символов, указывающих возможное движение по отрезкам улиц север-юг. Движение на север, юг, запад, восток обозначается буквами n, s, w, e соответственно.
Формат выходных данных
В первую строку вывести число отрезков улиц в самом коротком маршруте из точки AA в точку BB. Во вторую строку нужно выдать описание этого маршрута в виде последовательности символов n, s, w, e без пробелов. Если кратчайших маршрутов несколько, выдать самый первый среди них по алфавитному порядку. Гарантируется, что из точки AA можно попасть в точку BB.
Пояснение к первому примеру
Sample Input 1:
4 5 w sn wewww snsnns weeew snnsns wwwew ns w Sample Output 1:
Как ч понял сортировка по неубыванию это сортировка по возрастанию. То есть легкие элементы всплывают наверх, а тяжелые перемещаются вниз:
//Pascal const m = 1000 var arr: array[1..m] of integer; n,i, j, k: integer; begin readln(n); write ('Исходный массив: '); for i := 1 to n do begin readln(arr[i]); end; //сортировка методом пузырька for i := 1 to n-1 do for j := 1 to n-i do if arr[j] > arr[j+1] then begin k := arr[j]; arr[j] := arr[j+1]; arr[j+1] := k end;
write ('Отсортированный массив: '); for i := 1 to n do write (arr[i]:4); end.
Алгоритм сортировки на классическом языке программирования С
# define SWAP(A,B) {A=A^B;B=A^B;A=A^B;} void bubblesort(int A[], int n) { int i, j; for(i = n-1 ; i > 0 ; i--) { for(j = 0 ; j < i ; j++) { if( A[j] > A[j+1] ) SWAP(A[j],A[j+1]); } } }
//Pascal
const m = 1000
var
arr: array[1..m] of integer;
n,i, j, k: integer;
begin
readln(n);
write ('Исходный массив: ');
for i := 1 to n do begin
readln(arr[i]);
end;
//сортировка методом пузырька
for i := 1 to n-1 do
for j := 1 to n-i do
if arr[j] > arr[j+1] then begin
k := arr[j];
arr[j] := arr[j+1];
arr[j+1] := k
end;
write ('Отсортированный массив: ');
for i := 1 to n do
write (arr[i]:4);
end.
Алгоритм сортировки на классическом языке программирования С
# define SWAP(A,B) {A=A^B;B=A^B;A=A^B;}
void bubblesort(int A[], int n)
{
int i, j;
for(i = n-1 ; i > 0 ; i--)
{ for(j = 0 ; j < i ; j++)
{
if( A[j] > A[j+1] ) SWAP(A[j],A[j+1]);
}
}
}
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016
begin
Writeln(Range(1,100).Select(i->sin(i)*cos(i)).Where(x->x<>0).Average)
end.
Тестовое решение:
-0.00136006072493969
2. А вот так учат писать это же школьные учителя:
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016
var
m:array[1..100] of real;
i,k:integer;
s:real;
begin
s:=0;
k:=0;
for i:=1 to 100 do begin
m[i]:=sin(i)*cos(i);
if m[i]<>0 then begin
s:=s+m[i];
k:=k+1
end
end;
Writeln(s/k)
end.
Тестовое решение:
-0.00136006072493969