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 1246. Tethered Dog

I got WA..........
Posted by hello 14 Jun 2004 09:07
I got WA on test 7 all the time......
I submited many times . But still WA.
Can anyone help me ?
This is my code :
------------------------------------------------------------
{$A+,B+,D+,E+,F+,G+,I+,L+,N+,O+,P+,Q+,R+,S+,T+,V+,X+}
{$M 16384,0,655360}
type
  node = record
          x , y : Array [0..201] Of LongInt ;
          tx , ty , lx , ly : LongInt ;
         end;
var
  up , down , right1 , right2 , right3 , now : node ;
  h : Array [1..5] Of LongInt ;
  i , n : LongInt ;
  t : Boolean ;

  procedure init ;
    var
      c : Char ;
      s : Set Of Char ;
    begin
     s := ['0'..'9','-'] ;
     With now do
      begin
       repeat
        read ( c ) ;
       until c in s ;
       if c = '-'
        then begin
              tx := 2 ; read ( c ) ;
             end
        else tx := 1 ;
       lx := 0 ;
       repeat
        Inc ( lx ) ;
        x[lx] := ord ( c ) - 48 ;
        read ( c ) ;
       until c = ' ' ;

       repeat
        read ( c ) ;
       until c in s ;
       if c = '-'
        then begin
              tx := 2 ; read ( c ) ;
             end
        else ty := 1 ;
       ly := 0 ;
       repeat
        Inc ( ly ) ;
        y[ly] := ord ( c ) - 48 ;
        read ( c ) ;
       until Not ( c in s ) ;
      end;
    end;

  procedure first ;
    begin
     up.ty     := 2 ; up.ly     := MaxInt ;
     down.ty   := 1 ; down.ly   := MaxInt ;
     right1.tx := 2 ; right1.lx := MaxInt ;
     right2.tx := 2 ; right2.lx := MaxInt ;
     right3.tx := 2 ; right3.lx := MaxInt ;
    end;

  Function  check_y ( h : node ) : Boolean ;{true:big}
    var
      i : LongInt ;
      judge : Boolean ;
    begin
     if h.ty <> now.ty then
      begin
       if h.ty = 1
        then check_y := false
        else check_y := true ;
       exit
      end;
     if h.ty = 1
      then judge := true
      else judge := false ;
     if h.ly <> now.ly then
      begin
       if h.ly < now.ly
        then check_y := judge
        else check_y := not judge ;
       exit ;
      end;

     for i := 1 to now.ly do
      if h.y[i] <> now.y[i] then
       begin
        if h.y[i] < now.y[i]
         then check_y := judge
         else check_y := not judge ;
        exit ;
       end;
     check_y := false ;
    end;

  Function  check_x ( h , now : node ) : Boolean ;{true:small}
    var
      i : LongInt ;
      judge : Boolean ;
    begin
     if h.tx <> now.tx then
      begin
       if h.tx = 1
        then check_x := false
        else check_x := true ;
       exit ;
      end;
     if h.tx = 1
      then judge := true
      else judge := false ;
     if h.lx <> now.lx then
      begin
       if h.lx < now.lx
        then check_x := judge
        else check_x := not judge ;
       exit ;
      end;

     for i := 1 to now.lx do
      if h.x[i] <> now.x[i] then
       begin
        if h.x[i] < now.x[i]
         then check_x := judge
         else check_x := not judge ;
        exit ;
       end;
     check_x := false ;
    end;

  procedure yes ;
    begin
     writeln ( 'cw' ) ;
    end;

  procedure no ;
    begin
     writeln ( 'ccw' ) ;
    end;

begin
 first ;
 readln ( n ) ;
 for i := 1 to n do
  begin
   init ;

   t := false ;
   if check_y ( up ) then
    begin
     h[1] := i ; up := now ;
     t := true ;
    end;
   if Not check_y ( down ) then
    begin
     h[2] := i ; down := now ;
     t := true ;
    end;
   if check_x ( right1 , now )
    then begin
          h[5] := h[4] ; right3 := right2 ;
          h[4] := h[3] ; right2 := right1 ;
          h[3] := i    ; right1 := now    ;
         end
    else if check_x ( right2 , now )
          then begin
                h[5] := h[4] ; right3 := right2 ;
                h[4] := i    ; right2 := now    ;
               end
          else if check_x ( right3 , now ) then
                begin
                 h[5] := i ; right3 := now ;
                end;
  end;

 if ( h[3] = h[2] ) or ( h[3] = h[1] ) then h[3] := h[4] ;
 if ( h[3] = h[2] ) or ( h[3] = h[1] ) then
  begin
   h[3] := h[5] ;
   if h[1] < h[3]
    then begin
          if ( h[2] > h[1] ) and ( h[2] < h[3] )
           then yes
           else no ;
         end
    else begin
          if ( h[2] > h[3] ) and ( h[2] < h[1] )
           then no
           else yes ;
         end;
   halt ;
  end;

 if h[1] < h[3]
  then begin
        if ( h[2] > h[1] ) and ( h[2] < h[3] )
         then no
         else yes ;
       end
  else begin
        if ( h[2] < h[1] ) and ( h[2] > h[3] )
         then yes
         else no ;
       end;
end.

Edited by author 14.06.2004 09:08