|
|
вернуться в форумОбщий форумIs the test data of 1153(Supercomputer) right? I think my program is exactly right, but WA! Послано Li, Yi 5 дек 2001 17:58 I've tested a lot of data, and my program outputs the right answers. The following is my code: ============================================================ const maxdigit = 610; var a : array[1..maxdigit] of byte; b : array[0..maxdigit] of byte; cc : array[0..maxdigit] of byte; c, t : array[0..maxdigit] of byte; m : array[1..maxdigit] of byte; lla, la, lb, lc, lcc, lm, lt, start : integer; digit, digitpoint : integer; procedure init; var ch : char; i, p, q : integer; begin lcc := 0; while not eof do begin read(ch); if ch in ['0'..'9'] then begin inc(lcc); cc[lcc] := ord(ch) - 48; end; end; p := 0; for i := lcc downto 0 do begin p := p + cc[i] * 8; cc[i] := p mod 10; p := p div 10; end; if cc[0] > 0 then begin inc(lcc); for i := lcc downto 1 do cc[i] := cc[i - 1]; cc[0] := 0; end; inc(cc[lcc]); for i := lcc downto 1 do if cc[i] >= 10 then begin inc(cc[i + 1]); cc[i] := 0; end else break; if cc[0] > 1 then begin inc(lcc); for i := lcc downto lcc do cc[i] := cc[i - 1]; cc[0] := 0; end; end; procedure process; var k : integer; begin la := 0; if odd(lcc) then begin k := 0; digitpoint := lcc + 1; end else begin k := 1; digitpoint := lcc; end; while k <= lcc do begin inc(la); a[la] := cc[k] * 10 + cc[k + 1]; k := k + 2; end; end; function small : boolean; var i : integer; begin if lt > lm then small := false else if lt < lm then small := true else begin for i := 1 to lt do begin if t[i] > m[i] then begin small := false; exit; end; if t[i] < m[i] then begin small := true; exit; end; end; small := true; end; end; procedure minus; var i, j, k : integer; begin if lt < lm then begin j := lm - lt; for i := lm downto j do t[i] := t[i - j]; for i := 1 to j - 1 do t[i] := 0; end; k := 0; for i := lm downto 1 do if m[i] >= t[i] + k then begin m[i] := m[i] - t[i] - k; k := 0 end else begin m[i] := 10 + m[i] - t[i] - k; k := 1; end; j := 1; while (m[j] = 0) and (j < maxdigit) do inc(j); if j > 1 then begin for i := 1 to lm - j + 1 do m[i] := m[i + j - 1]; lm := lm - j + 1; end; end; procedure doublec; var i, j, k : integer; begin c[0] := 0; k := 0; for j := lb downto 0 do begin k := k + b[j] * 2; c[j] := k mod 10; k := k div 10; end; lc := lb; if c[0] > 0 then begin for i := lc + 1 downto 1 do c[i] := c[i - 1]; inc(lc); c[0] := 0; end; end; procedure worknext; var i, j, q : integer; begin if b[lb] >= 1 then dec(b[lb]) else begin b[lb] := 9; for i := lb - 1 downto 1 do begin if b[i] >= 1 then begin dec(b[i]); break; end; b[i] := 9; end; end; if b[1] = 0 then begin for i := 1 to lb - 1 do b[i] := b[i + 1]; dec(lb); b[lb] := 0; end; fillchar(cc, sizeof(cc), 0); lcc := 0; q := 0; for i := 1 to lb do begin q := q * 10 + b[i]; inc(lcc); cc[lcc] := q div 2; q := q mod 2; end; i := 1; while cc[i] = 0 do inc(i); for j := i to lcc do write(cc[j]); writeln; end; procedure main; var i, j, k : integer; begin inc(lc); inc(lla); if lm < 0 then lm := 0; inc(lm); m[lm] := a[lla]; if m[lm] >= 10 then begin inc(lm); m[lm] := m[lm - 1] mod 10; m[lm - 1] := m [lm - 1] div 10; end else if lm > 1 then begin inc(lm); m[lm] := m[lm - 1]; m[ I do not know why I got WA, either!! I also got WA many times. And I don't know why, either! Re: Is the test data of 1153(Supercomputer) right? I think my program is exactly right, but WA! > I've tested a lot of data, and my program outputs the right > answers. Yes, test data was wrong. I wonder, how one team got accepted on real contest. |
|
|