ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1007. Code Words

any1 give me some test plz.
Posted by Locomotive 20 Feb 2003 22:58
Var
  n,s,k,i             :integer;
  t                   :char;
  a                   :array[0..1001] of boolean;
  b                   :array[0..1001] of integer;

procedure writt(x,y:integer);
Var
  i                   :integer;
begin
  for i:=x to y do
    write(ord(a[i]));
end;

procedure add;
Var
  i,p                 :integer;
begin
  if k=0 then
  begin
    writt(1,s);
    write(0);
  end
  else
  begin
    b[n]:=0;
    for i:=n-1 downto 0 do
      b[i]:=b[i+1]+ord(a[i+1]);
    if k+b[0]>=(n+1) then {add 0}
    begin
      p:=-1;
      repeat inc(p);
      until (k+b[p]) mod (n+1)=0;
      writt(1,p); write(0);
      writt(p+1,s);
    end
    else
    begin
      p:=-1;
      repeat inc(p);
      until (k+p+b[p]) mod (n+1)=0;
      writt(1,p-1);
      write(1);
      writt(p,s);
    end;
  end;
end;

procedure chn;
begin
  if k=0 then
    writt(1,n)
  else
  begin
    writt(1,k-1);
    if not a[k] then while true do;
    write(0);
    writt(k+1,n);
  end
end;

procedure del;
Var
  i,p                 :integer;
begin
  if k=0 then
    writt(1,n)
  else
  begin
    b[n+1]:=0;
    for i:=n downto 0 do
      b[i]:=b[i+1]+ord(a[i+1]);
    p:=0;
    repeat inc(p);
    until (k-b[p]-p*(ord(a[p]))+n+1) mod (n+1)=0;
    writt(1,p-1);
    writt(p+1,n+1);
  end;
end;

begin
  readln(n);
  while not eof do
  begin
    s:=0;
    while (not eoln) and (not eof) do
    begin
      read(t);
      if (ord(t)=48) or (ord(t)=49) then begin
        inc(s);
        a[s]:=ord(t)=49;
      end;
    end;
    readln;
    k:=0;
    for i:=1 to s do
      if a[i] then
        k:=(k+i) mod (n+1);
    if s =n-1 then
      add
      else if s=n then
        chn
        else if s=n+1 then
          del;
   if (s>=n-1) and (s<=n+1) then
      writeln;
  end;
end.
I Got AC, but if you have Free-Time, see how my mistake was funny!
Posted by Locomotive 21 Feb 2003 10:28
Hi there,

After 20Wa, i see my programs answers right for tescases, sepeartely
(i.e. one senteces per test.) but suddenly i saw that my program after
10test for n=5
which in 2nd sentence 1100-->11100
in 10th i again write 1100 and saw incredible!:
answer of 1100 was 01100!!!!

where was my mistake?!!

Just in Add Procedure i read value of a[n] but sentence was only
n-1bit and nth value was by previouses tests!
so just i insert this line after begin of add procedure:
A[N]:=False;

And Got AC :P

wish best times for you
Aidin_n7@hotmail.com