type rec=record
ch:integer;
zn:integer;
res:real;
end;
type mass=array [1..19819] of rec;
var d:mass;
n,zn,ch,k,i,z,b,c,c1:integer;
f:boolean;
b1:real;
function gcd(x,y:integer):integer;
begin
if y=0
then gcd:=x else gcd:=gcd(y,x mod y);
end;
procedure quicksort(var d:mass; n:integer);
PROCEDURE sort(l,r:integer);
var i,j,k:integer; b:integer;
b1,x:real;
begin
i:=l;
j:=r;
k:=(l+r) div 2;
x:=d[k].res;
repeat
while d[i].res<x do inc(i);
while d[j].res>x do dec(j);
if i<=j
then begin
b1:=d[i].res;
d[i].res:=d[j].res;
d[j].res:=b1;
b:=d[i].ch;
d[i].ch:=d[j].ch;
d[j].ch:=b;
b:=d[i].zn;
d[i].zn:=d[j].zn;
d[j].res:=b;
inc(i);
dec(j);
end;
until i>j;
if i<r
then sort(i,r);
if j>l
then sort(l,j);
end;
begin
readln(n);
k:=0;
for zn:=2 to n do begin
for ch:=1 to zn-1 do
begin
if (zn mod ch<>0) or (ch=1)
then begin
if gcd(ch,zn)=1
then begin inc(k); d[k].ch:=ch; d[k].zn:=zn; d[k].res:=ch/zn; end;
end;
end;
end;
z:=k;
sort(1,k);
for i:=1 to k do
writeln(d[i].ch,'/',d[i].zn);
end.
можешь примерно написать как сделал чтобы так быстро работало не (с копированием строк, а не изменение)?У тебя работает в 2 раза быстрее чем у меня.Ну или хотя бы как работает программа.
Насчёт 16-бит незнаю( если можешь напиши (код)), я так то и храню в массиве '0' нужны для приравнивания строк и вопрос как ты без ord строку в число переведёшь, в задаче надо использовать строку так как числа очень большие по итогу получаются.
Про сложить 2 числа это подзадача ( общая задача на Дин. программирование) Найти кол-во вариантов, про дополнение строк там как бы выше находится максимальная длина+1 специально чтобы если это наибольшая строка цикл ниразу не выполнялся (m),сложение работает нормально так как на тесте получаю только timelimit. Насчёт var передачи вполне вероятно.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.