1055.抓作弊 SDNUOJ 1055
Description
在一个大试场里,有n行m列的考生,lg和众多同学正在考试,这时,有一部分考生作弊,当然,监考老师syc能发现他们。但是只有一个监考老师,他由于高度近视,只能发现与他同行同列的作弊者,而且由于监考老师年老体弱,在考试过程中无法移动。现在已知n * m个考生中谁在作弊,请帮监考老师找一个位置,可以发现最多的作弊者(监考老师可以和某个考生在同一位置)。如果监考老师的位置上的考生在作弊,那么监考老师先前后看,发现他作弊,再左右看,又发现他作弊,算做发现2个考生作弊
Input
第一行两个数n,m ,表示试场是nm的,接下来是nm的矩阵,1表示作弊,0表示不作弊。
0<n,m<=100
Output
共一行,一个数,表示最多可以发现多少作弊者。
Sample Input
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
Sample Output
10
这题卡了几个月,后来发现:sort不能对二维数组排序…想想也是,没告诉它二维数组怎么排序…
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int a[105][105];
int sum[105][105];
int ans[10005];
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
scanf("%d", &a[i][j]);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
{
for(int k = 0; k < m; k++)
if(a[i][k]==1)
sum[i][j]++;
for(int p = 0; p < n; p ++)
if(a[p][j]==1)
sum[i][j]++;
}
int tot = 0;
for(int i = 0; i < n; ++i)
for(int j = 0; j < m; ++j)
ans[tot++] = sum[i][j];
sort(ans, ans + tot);
printf("%d", ans[tot - 1]);
return 0;
}