这题我把cpp程序翻译成pascal就AC了,然cpp的程序仍然TLE on test 10。
  SGU 168 解题手记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdio>
#include <algorithm>
using namespace std;
 
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int (*a)[1002]=new int[n+2][1002];
    for (int i(0);i<=m+1;a[0][i++]=32767);
    for (int i(0);i<=m+1;a[n+1][i++]=32767);
    for (int i(0);i<=n+1;a[i++][0]=32767);
    for (int i(0);i<=n+1;a[i++][m+1]=32767);
    for (int i(1);i<=n;++i)
        for (int j(1);j<=m;scanf("%d",&a[i][j++]));
    for (int j=m;j>0;--j)
        for (int i=n;i>0;--i) a[i][j]=min(min(a[i][j],a[i+1][j]),min(a[i-1][j+1],a[i][j+1]));
    for (int i(1);i<=n;++i)
    {
        for (int j(1);j<=m;printf("%d ",a[i][j++]));
        printf("\n");
    }
    delete []a;
    return 0;
}
?View Code PASCAL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//AC
program sgu168pas;
var
  a:array[0..1001,0..1001] of longint;
  i,j,n,m:longint;
 
function min(const a,b:longint):longint;
begin
  if a<b then min:=a
         else min:=b;
end;
 
begin
  readln(n,m);
  for i:=0 to m+1 do a[0,i]:=32767;
  for i:=0 to m+1 do a[n+1,i]:=32767;
  for i:=0 to n+1 do a[i,0]:=32767;
  for i:=0 to n+1 do a[i,m+1]:=32767;
  for i:=1 to n do
    for j:=1 to m do read(a[i,j]);
  for j:=m downto 1 do
    for i:=n downto 1 do a[i,j]:=min(min(a[i,j],a[i+1,j]),min(a[i-1,j+1],a[i,j+1]));
  for i:=1 to n do begin
    for j:=1 to m do write(a[i,j],' ');
    writeln;
  end;
end.