SGU 168 求助
这题我把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; } |
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. |
6 Responses
cpp优化输入之后可以AC~~
用gets(),不用scanf()
Reply
1.你说 b ij =min {b i 1 j , bi −1 j 1 ,b ij1 , bi j}
我觉得是 bi,j=min{b i+1,j,bi-1,j+1,ai,j}
2.可否发下你的pascal AC 程序,
我的竟然是PE。
Reply
b[i][j+1]是必要的,b[i][j]可以换成a[i][j]。
Reply
thanks,
我明白了,i=1时有此必要
Reply
准确的说
n=1 and i=1 时有此必要,
其余情况,bi,j+1 要么更新了bi-1,j+1,要么更新了bi+1,j,
没必要再考虑
Reply
你觉得呢
Reply
Top Seven
Recent Comments
Categories
Blogroll
Login
Sponsor