【作弊】 (3+3+3+3+3=15 分)
题目描述: 在一个大试场里, 有 n 行 m 列的考生, 笑笑和众多的同学正在考试,这时,有一部分考生作弊,当然,监考老师能发现他们。但是只有一个监考老师,他由于高度近视,只能发现与他同行同列的作弊者,而且由于监考老师年老体弱,在考试过程中无法移动。 现在已知n*m 个考生谁在作弊,请帮监考老师找一个位置,可以发现最多的作弊者(监考老师可以和某个考生同一位置) 。如果监考老师的位置上考生作弊,那么监考老师前后看,发现他在作弊,再左右看,又发现他作弊,算做发现两个作弊考生。
数据范围:
对于 50%的数据, 0<n、 m<=10, 对于 100%的数据, 0<n、m<=100,所有数据都在 longint 范围内。
样例说明: 监考老师在最中间,那个位置上的作弊者算作两 次。
输入格式:cheat.in
第一行两个数 n,m,表示试场是 n*m的,接下来的是 n*m 的矩阵,1 表示作弊,0 表示不作弊。
输出格式:cheat.out
共一行,一个数,表示最多可以发现多少作弊者。
样式输入:
5_5
0_0_1_0_0
0_0_1_0_0
1_1_1_1_1
0_0_1_0_0
0_0_1_0_0
样式输入:
10
Program test_2013_7;
Var n,m,i,j,k,d,max:longint;
s:array[1..100,1..100] of integer;
begin
assing(input,’cheat.in’);
reset(input);
assing(output,’cheat.out’);
rewrite(output);
max:=0;
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
read( a[i,j] );
readln;
end;
For for i:=1 to n do
begin
for j:=1 to n do
begin
d:=0 ;
For k:=1 to n do
If (s[k,j]=1) then inc(d);
For k:=1 to m do
If ( s[i,k]=1 ) then inc(d);
if ( d>max ) then max:=d;
end
end;
writeln(max);
close(input);
close(output);
end.