Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我郁闷了……帮忙看看哪里错了WA的程序: Program PKU1088; Const Go:Array[1..4, 1..2] Of Longint=((1, 0), (0, 1), (-1, 0), (0, -1)); Var Map:Array[1..100, 1..100] Of Longint; F:Array[1..100, 1..100] Of Longint; R, C, I, J, Max, X, Y, K, T:Longint; Function Search(Y, X:Longint):Longint; Var I, NowX, NowY:Longint; J, K:Longint; Begin If F[Y, X]<>0 Then Begin Search:=F[Y, X]; Exit; End; J:=0; For I:=1 To 4 Do Begin NowY:=Go[I, 1]+Y; NowX:=Go[I, 2]+X; If (NowX>=1) And (NowY>=1) And (NowX<=C) And (NowY<=R) And(Map[Y, X]>Map[NowY, NowX]) Then Begin K:=Search(NowY, NowX)+1; If K>J Then J:=K; End; End; Search:=J; F[Y, X]:=J; End; Begin // Assign(input, 'ski.in'); // Reset(Input); While Not Eof Do Begin FillChar(F, SizeOf(F), 0); Readln(R, C); For I:=1 To R Do Begin For J:=1 To C Do Read(Map[I, J]); Readln; End; For I:=1 To R Do For J:=1 To C Do Begin T:=0; For K:=1 To 4 Do Begin Y:=Go[K, 1]+I; X:=Go[K, 2]+J; If (Y>=1) And (X>=1) And (Y<=R) And (X<=C) Then If Map[I, J]>Map[Y, X] Then Inc(T); End; If T=0 Then F[I, J]:=1; End; For I:=1 To R Do For J:=1 To C Do If F[I, J]=0 Then Search(I, J); Max:=0; For I:=1 To R Do For J:=1 To C Do If F[I, J]>Max Then Max:=F[I, J]; Writeln(Max); End; // Close(input); End. TLE的程序(不是我编的): program ski; const max_size = 200; dr: array [1..4] of longint = (-1, 1, 0, 0); dc: array [1..4] of longint = (0, 0, -1, 1); var row, col: longint; point: longint; height, len: array [1..max_size, 1..max_size] of longint; inq: array [1..max_size, 1..max_size] of boolean; queue: array [0..max_size * max_size, 1..2] of longint; head, tail: longint; r1, c1, r2, c2, k, i, j: longint; procedure Enq(r, c, newl: longint); begin if newl > len[r, c] then begin len[r, c] := newl; if not inq[r, c] then begin Inc(tail); if tail > point then tail := 0; queue[tail, 1] := r; queue[tail, 2] := c; inq[r, c] := true; end; end; end; begin // Assign(input, 'ski.in'); // Reset(input); While not Eof Do Begin Readln(row, col); for i := 1 to row do begin for j := 1 to col do Read(height[i, j]); readln; End; { Initialize queue and len } point := row * col; head := 0; tail := 0; FillChar(inq, SizeOf(inq), false); FillChar(len, SizeOf(len), 0); for i := 1 to row do for j := 1 to col do Enq(i, j, 1); { Find the longest run } while head <> tail do begin Inc(head); if head > point then head := 0; r1 := queue[head, 1]; c1 := queue[head, 2]; inq[r1, c1] := false; for k := 1 to 4 do begin r2 := r1 + dr[k]; c2 := c1 + dc[k]; if (r2 > 0) and (c2 > 0) and (r2 <= row) and (c2 <= col) then if height[r2, c2] > height[r1, c1] then Enq(r2, c2, len[r1, c1] + 1); end; end; { Output } k := 0; for i := 1 to row do for j := 1 to col do if len[i, j] > k then k := len[i, j]; Writeln(k); End; // Close(input); end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator