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 1356. Something Easier

Who can help me? I have WA8...
Posted by Someone 21 Jan 2006 01:53
Look at it. I think it is easy to understand this source:

[code deleted :) ]

You need only time to find bugs in programms.

Good Luck!

Edited by author 21.01.2006 03:52
Re: Who can help me? I have WA8...
Posted by Rustam 13 Nov 2008 17:10
i also have WA#8. here is my code:
program z1356;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
    n,k,c,i,j,t,p:longint;
const mas :array [1..5133] of longint = (
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,
179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,
283,//etc :) last number  49999///
);
procedure init;
begin
 {$IFNDEF ONLINE_JUDGE}
 assign(input,'input.txt');
 reset(Input);
 assign(output,'output.txt');
 rewrite(output);
 {$ENDIF}
end;
procedure print;
begin
{$IFNDEF ONLINE_JUDGE}
 close(input);
 close(output);
{$ENDIF}
 halt(0);
end;
function simple(x:longint):boolean;
var i:longint;
begin
  result:=false;
  if x=1 then exit;
  if x=2 then begin
    result:=true;
    exit;
  end;
  for i:=2 to trunc(sqrt(x)) do
    if x mod i=0 then exit;
  result:=true;
end;
function canbe(x,k,st:longint):boolean;
var i:longint;
begin
  if (x=0) then result:=true else
  if (k=3) then begin
    if simple(x) then begin
        result:=true;
        write(x,' ');
      end
      else result:=false;
  end else
  begin
    canbe:=false;
    while mas[st]>x do
     dec(st);
    for i:=st downto 1 do
      begin
        result:=canbe(x-mas[i],k+1,st);
        if result then
          begin
            write(mas[i],' ');
            exit;
          end;
      end;
  end;
end;
procedure couldbe(t:longint);
var i,k:longint;
begin
  k:=5133;
  while mas[k]>t do dec(k);
  if mas[k]=t then write(mas[k]) else begin
      for i:=k downto 1 do
        if simple(t-mas[i]) then begin
            write(mas[i], ' ',t-mas[i]);
            exit;
        end;
  end;
end;
begin
 init;
 read(n);
 for i:=1 to n do begin
   read(t);
   if odd(t) then
   canbe(t,1,5133) else
   couldbe(t);
   writeln;
 end;
 print;
end.