比这篇新的文章:
range.pas
比这篇旧的文章: game1.dd.cpp
作者: xpycc, 点击212次, 评论(0), 收藏者(0)
打分:
所有评论,共0条:( 我也来说两句)
比这篇旧的文章: game1.dd.cpp
range.pas
语言: Delphi, 标签: 无 2008/08/22发布 3个月前更新作者: xpycc, 点击212次, 评论(0), 收藏者(0)
Delphi语言: range.pas
01 {
02 ID:xpycc1
03 PROG:range
04 LANG:PASCAL
05 }
06
07 program range;
08 const
09 maxn=250;
10 var
11 n:integer;
12 sum:array[0..maxn,0..maxn]of word;
13 ans:array[1..maxn]of word;
14 // 越来越有星牛的注释风格了,我喜欢这个风格
15 procedure iniz;
16 var
17 i,j,t:integer;
18 c:char;
19 begin
20 assign(input,'range.in'); reset(input);
21 readln(n);
22 for i:=1 to n do //预处理数组sum
23 begin
24 t:=0;
25 for j:=1 to n do
26 begin
27 read(c);
28 if c='1'then inc(t);
29 sum[j,i]:=sum[j,i-1]+t; //在这里高兴了半天,以为状态转移学得很好
30 end;
31 readln;
32 end;
33 close(input);
34 end;
35 //
36 function min(x,y:integer):integer;
37 begin
38 if x<y then min:=x
39 else min:=y;
40 end;
41 //
42 procedure main;
43 var
44 i,j,m,k:integer;
45 begin
46 for i:=0 to n-2 do
47 for j:=0 to n-2 do
48 begin
49 m:=min(n-i,n-j);
50 for k:=2 to m do
51 //判断
52 if sum[j+k,i+k]+sum[j,i]-sum[j+k,i]-sum[j,i+k]=sqr(k) then
53 inc(ans[k])
54 else break;
55 end;
56 end;
57 //
58 procedure print;
59 var
60 i:integer;
61 begin
62 assign(output,'range.out'); rewrite(output);
63 for i:=2 to n do
64 if ans[i]>0 then writeln(i,' ',ans[i])
65 else break;
66 close(output);
67 end;
68 //
69 begin
70 iniz;
71 main;
72 print;
73 end.
02 ID:xpycc1
03 PROG:range
04 LANG:PASCAL
05 }
06
07 program range;
08 const
09 maxn=250;
10 var
11 n:integer;
12 sum:array[0..maxn,0..maxn]of word;
13 ans:array[1..maxn]of word;
14 // 越来越有星牛的注释风格了,我喜欢这个风格
15 procedure iniz;
16 var
17 i,j,t:integer;
18 c:char;
19 begin
20 assign(input,'range.in'); reset(input);
21 readln(n);
22 for i:=1 to n do //预处理数组sum
23 begin
24 t:=0;
25 for j:=1 to n do
26 begin
27 read(c);
28 if c='1'then inc(t);
29 sum[j,i]:=sum[j,i-1]+t; //在这里高兴了半天,以为状态转移学得很好
30 end;
31 readln;
32 end;
33 close(input);
34 end;
35 //
36 function min(x,y:integer):integer;
37 begin
38 if x<y then min:=x
39 else min:=y;
40 end;
41 //
42 procedure main;
43 var
44 i,j,m,k:integer;
45 begin
46 for i:=0 to n-2 do
47 for j:=0 to n-2 do
48 begin
49 m:=min(n-i,n-j);
50 for k:=2 to m do
51 //判断
52 if sum[j+k,i+k]+sum[j,i]-sum[j+k,i]-sum[j,i+k]=sqr(k) then
53 inc(ans[k])
54 else break;
55 end;
56 end;
57 //
58 procedure print;
59 var
60 i:integer;
61 begin
62 assign(output,'range.out'); rewrite(output);
63 for i:=2 to n do
64 if ans[i]>0 then writeln(i,' ',ans[i])
65 else break;
66 close(output);
67 end;
68 //
69 begin
70 iniz;
71 main;
72 print;
73 end.
所有评论,共0条:( 我也来说两句)
代码