Если есть вопросы по решению задач с сайта acmp.ru пишите их сюда
ACMP
Сообщений 1 страница 24 из 24
Поделиться22011-05-03 15:50:52
кому надо №338(Ласкутки) сделано с помощью алгаритма Очередь
правда у неё ран таим на 5 тесте
var a:array [0..101,0..1001] of longint;
Q:array [1..2,1..10000] of longint;
i,j,n,m,UN,UK,i1,j1,SK,x1,y1:longint;
Procedure Sosed(x,y:longint);
begin
if a[x,y]=0 then begin
Q[1,UK]:=x; Q[2,UK]:=y;
UK:=UK+1; a[x,y]:=-1;
end;
end;
Begin
readln(n,m);
for i:=1 to n do
for j:=1 to m do read(a[i,j]);
for i:=0 to m+1 do begin
a[i,0]:=-1;
a[i,m+1]:=-1;
end;
for j:=1 to m do begin
A[0,j]:=-1;
a[n+1,j]:=-1;
end;
SK:=0;
for i:=1 to n do
for j:=1 to m do
if a[i,j]=0 then begin UN:=1; UK:=1; SK:=SK+1; Q[1,UK]:=i; Q[2,UK]:=j; UK:=UK+1; a[i,j]:=SK;
while UN<>UK do begin
i1:=Q[1,UN];
j1:=Q[2,UN];
UN:=UN+1;
Sosed(i1-1,j1);
Sosed(i1+1,j1);
Sosed(i1,j1-1);
Sosed(i1,j1+1);
end;
end;
writeln(SK);
end.
Поделиться32011-05-04 11:27:15
новая версия задачи
var a:array [-100..1001,-100..1001] of longint;
Q:array [1..2,1..10000] of longint;
i,j,n,m,UN,UK,i1,j1,SK,x1,y1,l:longint;
Procedure Sosed(x,y:longint);
begin
if a[x,y]=0 then begin
Q[1,UK]:=x; Q[2,UK]:=y;
UK:=UK+1; a[x,y]:=sk;
end;
end;
Begin
readln(n,m);
if (n=0) or (m=0 ) then begin writeln(0); exit; end;
for i:=1 to n do
for j:=1 to m do read(a[i,j]);
for i:=0 to m+1 do begin
a[i,0]:=1;
a[i,m+1]:=1;
end;
for j:=1 to m do begin
A[0,j]:=1;
a[n+1,j]:=1;
end;
SK:=1;
for i:=1 to n do
for j:=1 to m do
if a[i,j]=0 then begin UN:=1; UK:=1; SK:=SK+1; Q[1,UK]:=i; Q[2,UK]:=j; UK:=UK+1; a[i,j]:=sk;
while UN<>UK do begin
i1:=Q[1,UN];
j1:=Q[2,UN];
UN:=UN+1;
Sosed(i1-1,j1);
Sosed(i1+1,j1);
Sosed(i1,j1-1);
Sosed(i1,j1+1);
end;
end;
writeln(SK-1);
for i:=0 to n+1 do begin
for j:=0 to m+1 do write(a[i,j]:3);
writeln;
end;
end.
Поделиться42011-05-16 16:56:53
правда тоже рантаим помогите кто решил
Поделиться52011-05-19 12:11:25
Я решил, вот решение.
var a:array [0..101,0..1001] of longint; Q:array [1..2,1..10000] of longint; i,j,n,m,UN,UK,i1,j1,SK,k,x1,y1:longint; Procedure Sosed(x,y:longint); begin if a[x,y]=0 then begin Q[1,UK]:=x; Q[2,UK]:=y; UK:=UK+1; a[x,y]:=SK; end; end; Begin assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); readln(n,m); //readln(k); for i := 1 to n do for j := 1 to m do begin read(a[i,j]); a[i,j] := -a[i, j]; end; for i:=0 to m + 1 do begin a[0,i]:=-1; a[n+1,i]:=-1; end; for i:=1 to n do begin A[i, 0]:=-1; a[i, m+1]:=-1; end; SK:=0; for i:=1 to n do for j:=1 to m do if a[i,j]=0 then begin UN:=1; UK:=1; SK:=SK+1; Q[1,UK]:=i; Q[2,UK]:=j; UK:=UK+1; a[i,j]:=SK; while UN<>UK do begin i1:=Q[1,UN]; j1:=Q[2,UN]; UN:=UN+1; Sosed(i1-1,j1); Sosed(i1+1,j1); Sosed(i1,j1-1); Sosed(i1,j1+1); end; end; {for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end;} writeln(sk); end.
Поделиться62011-05-19 17:01:32
ты крут а где в моём ошибка
Поделиться72011-05-19 17:17:03
Всё спс у меня тоже пошла теперь кста подскожи нащёт ошибок
Поделиться82011-05-19 20:31:18
Я писал про ошибку в вашем алгоритме очередь
Поделиться92011-10-15 09:22:13
Боулинг
var p:array[1..10]of longint;a:array[1..100]of longint;n,i,t,x:longint;
begin
assign(input, 'input.txt');reset(input);
assign(output, 'output.txt');rewrite(output);
readln(n);
for i:=1 to n do read(a[i]);
i:=1;
for t:=1 to 10 do
begin
if a[i]=10 then begin p[t]:=10+a[i+1]+a[i+2];i:=i+1; end
else if a[i]+a[i+1]=10 then begin p[t]:=10+a[i+2];i:=i+2; end
else begin p[t]:=a[i]+a[i+1];i:=i+2; end;
end;
x:=0;
for i:=1 to 10 do x:=x+p[i];
writeln(x);
end.
Поделиться102011-10-18 20:04:49
Проблема с задачей на acmp.ru Друзья. Вроде код такой как писали в классе.
var g:array[1..1000,1..1000]of longint; n,i,s,k,j:longint; p:array[1..1000]of boolean; procedure DFS(v:integer); var j:integer; begin p[v]:=false; for j:=1 to n do if (G[v,i]=1)and(p[j]=true) then DFS(j); end; begin assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); read(n,s); for i:=1 to n do for j:=1 to n do read(g[i,j]); k:=-1; for i:=1 to n do p[i]:=true; for i:=1 to n do if p[i]=true then begin k:=k+1; DFS(i);end; write(k); end.
Что не так на третьем тесте не проходит!!
Поделиться112011-10-19 15:31:31
for j:=1 to n do
if (G[v,i]=1)and(p[j]=true) then DFS(j);
У тебя счетчит j а в ифе на написано G[v,i] исправь
for i:=1 to n do if p[i]=true then begin k:=k+1; DFS(i);end;
Зачем это ведь надо просто DFS(s); но тогда в процедуре добавь k:=k+1;
Поделиться122011-10-19 18:26:47
Так как ты сказал я вроде исправил, но все6 равно ошибка на 3-ем тесте((
var g:array[1..1000,1..1000]of longint; n,i,s,k,j:longint; p:array[1..1000]of boolean; procedure DFS(v:integer); var j:integer; begin p[v]:=false; for j:=1 to n do if (G[v,j]=1)and(p[j]=true) then DFS(j);k:=k+1; end; begin assign(input,'input.txt'); reset(input); assign(output,'output.txt'); rewrite(output); read(n,s); for i:=1 to n do for j:=1 to n do read(g[i,j]); k:=-1; for i:=1 to n do p[i]:=true; for i:=1 to n do if p[i]=true then begin DFS(s);end; write(k); end.
P.S Не помогайте ему!!!!
Поделиться132011-10-20 11:11:36
for i:=1 to n do p[i]:=true;
for i:=1 to n do
if p[i]=true then begin
DFS(s);end;
Это убери напиши DFS(s); и в процедуре добавь k:=k+1;
begin
p[v]:=false;
k:=k+1;
for j:=1 to ...
end;
вот так напиши в процедуре
Поделиться142011-10-20 11:19:25
var p:array [1..1000] of boolean; g:array [1..100,1..100] of longint; k,i,n,s,j:longint; procedure dfs(v:longint); var i:longint; begin p[v]:=false; k:=k+1; for i:=1 to n do if (g[v,i]=1)and(p[i]=true) then dfs(i); end; begin assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); readln(n,s); for i:=1 to n do for j:=1 to n do read(g[i,j]); for i:=1 to n do p[i]:=true; k:=-1; dfs(s); writeln(k); end.
Вот как у меня
Поделиться152011-10-20 14:34:07
Спасибо!
Я разобрался с этой задачей)
Поделиться162011-10-28 16:03:51
Раз-два, раз-два
var a,b:array[1..300]of integer;
i,j,n,l:integer;
f:boolean;
procedure del(var k:integer);
var x:array[1..300]of integer;
i,os:integer;
begin
os:=0;
for i:=k downto 1 do
begin
x[i]:=(os*10+b[i])div 2;
os:=(os*10+b[i])mod 2;
end;
while x[k]=0 do k:=k-1;
for i:=1 to k do b[i]:=x[i];
end;
begin
assign(input, 'input.txt');reset(input);
assign(output, 'output.txt');rewrite(output);
readln(n);
a[1]:=2;
for i:=2 to n do
begin
a[i]:=1;
f:=true;
for j:=1 to n do b[j]:=a[j];
l:=i;
for j:=1 to i do
begin
f:=(b[1]mod 2=0);
if f then del(l) else break;
end;
if not(f) then a[i]:=2;
end;
for i:=n downto 1 do write(a[i]);
end.
Поделиться172011-10-28 18:22:54
барбара спасибо!
Поделиться182011-10-29 12:46:20
Тебе не задрало тупо копиравать
Поделиться192011-10-29 14:53:51
чтоб ты знал я идею взял а написал свои кодом.
Поделиться202011-11-05 10:33:13
Игра с монеткой
var p:array[0..20]of byte;
n,m,k,s,i:longint;
begin
assign(input, 'input.txt');reset(input);
assign(output, 'output.txt');rewrite(output);
readln(n,m);
for i:=0 to n do p[i]:=0;
k:=0;
while p[0]=0 do
begin
s:=0;
for i:=1 to n do
s:=s+p[i];
if s>=m then k:=k+1;
i:=n;
while p[i]=1 do
begin
p[i]:=0;
i:=i-1;
end;
p[i]:=1;
end;
writeln(k);
end.
Поделиться212011-11-08 15:03:51
Кто сделал задачу Профессор на acmp.ru можете объяснить!
Поделиться222011-11-25 14:39:47
№465
var f:array[1..1000]of ansistring;i,n:integer;
function sum(a,b:ansistring):ansistring;
var x,y,z:array[1..10000]of integer;nx,ny,nz,i,err:integer;ans,c:ansistring;
begin
nx:=length(a);ny:=length(b);
for i:=1 to nx do val(a[i],x[nx-i+1],err);
for i:=1 to ny do val(b[i],y[ny-i+1],err);
if nx>ny then nz:=nx else nz:=ny;
for i:=1 to nz+1 do z[i]:=0;
for i:=1 to nz do
begin
z[i]:=z[i]+x[i]+y[i];
if z[i]>9 then begin z[i+1]:=1;z[i]:=z[i] mod 10; end;
end;
if z[nz+1]>0 then nz:=nz+1;
ans:='';
for i:=nz downto 1 do begin str(z[i],c);ans:=ans+c; end;
sum:=ans;
end;
begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
readln(n);
f[1]:='2';f[2]:='3';
for i:=3 to n do f[i]:=sum(f[i-2],f[i-1]);
writeln(f[n]);
end.
Поделиться232012-02-15 04:38:39
413 Военная база
на 4 тесте выдает Time limit exceeded помогите код подправить?
Все уже сделала!
var t: array [1..500,1..500] of integer;
n,m,i,j,kol:integer;
s:char;
begin
assign (input,'input.txt');
assign (output,'output.txt');
readln(n,m);
kol:=1;
for i := 1 to n do
begin
for j := 1 to m do begin read(s);
if s='#' then
t[i,j]:=-1;
end;
readln;
end;
for i := 1 to n do
begin
for j := 1 to m do
begin
if t[i,j]=-1 then
if t[i-1,j]>0 then
t[i,j]:= t[i-1,j]
else
if t[i,j-1]>0 then
t[i,j]:= t[i,j-1]
else
begin
t[i,j]:=kol;
inc(kol);
end;
end;
end;
write(kol-1);
end.
Отредактировано Марина (2012-02-15 10:11:19)
Поделиться242012-02-15 10:08:21
Кто сделал задачу Строительство на acmp.ru можете объяснить!