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;
}

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
我在朝九晚六双休的联想等你:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务