Если первая дуга синусоиды - синусоида при 0 <= x <= pi, то область изображена на рисунке. Точка с координатами (x, y) принадлежит области, если 0 <= x <= pi и 0 < y < sin(x), лежит на границе, если первое выполнено, и y = 0 или y = sin(x), а иначе не лежит в области.
Код (PascalABC.NET 3.2): begin var x, y: real; readln(x, y); if (0 <= x) and (x <= pi) then if (0 < y) and (y < sin(x)) then writeln('Внутри области') else if (0 = y) or (y = sin(x)) then writeln('На границе') else writeln('Не принадлежит') else writeln('Не принадлежит') end.
На каждом шаге имеет смысл менять два горшка с разными цветами. Поэтому всё получится, если роз, стоящих на чётных местах, будет столько же, сколько и фиалок на нечётных. При этом если тех и других k, то всего нужно k перестановок. Код (PascalABC.NET 3.2): begin var n := ReadInteger(); var roses := new integer[n]; var count_roses := 0; var violets := new integer[n]; var count_violets := 0; for var i := 1 to n do begin if ReadInteger() = i mod 2 then if i mod 2 = 0 then begin roses[count_roses] := i; inc(count_roses); end else begin violets[count_violets] := i; inc(count_violets); end; end; if count_roses = count_violets then begin writeln(count_roses); for var i := 0 to count_roses - 1 do println(roses[i], violets[i]); end else write(-1) end.
Точка с координатами (x, y) принадлежит области, если 0 <= x <= pi и 0 < y < sin(x), лежит на границе, если первое выполнено, и y = 0 или y = sin(x), а иначе не лежит в области.
Код (PascalABC.NET 3.2):
begin
var x, y: real;
readln(x, y);
if (0 <= x) and (x <= pi) then
if (0 < y) and (y < sin(x)) then
writeln('Внутри области')
else if (0 = y) or (y = sin(x)) then
writeln('На границе')
else
writeln('Не принадлежит')
else
writeln('Не принадлежит')
end.
Код (PascalABC.NET 3.2):
begin
var n := ReadInteger();
var roses := new integer[n];
var count_roses := 0;
var violets := new integer[n];
var count_violets := 0;
for var i := 1 to n do
begin
if ReadInteger() = i mod 2 then
if i mod 2 = 0 then
begin
roses[count_roses] := i;
inc(count_roses);
end
else
begin
violets[count_violets] := i;
inc(count_violets);
end;
end;
if count_roses = count_violets then
begin
writeln(count_roses);
for var i := 0 to count_roses - 1 do
println(roses[i], violets[i]);
end
else
write(-1)
end.