range.pas

切换背景色
主题: 字体: 切换行号 全选代码块(Ctrl+C复制) xpycc4个月前贴出, Delphi 语言
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.
返回正常查看模式 返回代码发芽网首页