比这篇新的文章: range.pas
比这篇旧的文章: game1.dd.cpp

range.pas

语言: Delphi, 标签: 无  2008/08/22发布 3个月前更新
作者: xpycc, 点击212次, 评论(0), 收藏者(0)

开关行号, 全选(Ctrl+C复制) | 一键复制:HTML, BBCode(Discuz!) , 源代码 | 查看:裸代码, 全屏
背景
主题: 字体:
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.
打分:

所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论