【求救】这题50分 代码有什么问题
  • 板块题目总版
  • 楼主Chen78999
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/6/3 09:21
  • 上次更新2023/10/23 14:02:28
查看原帖
【求救】这题50分 代码有什么问题
819328
Chen78999楼主2023/6/3 09:21

题目

最近,某个疾病非常严重,具有很强的传染性,为了研究这种传染病,蜗蜗建立一个传染病模型。有 n×nn \times n 个人站在一起形成一个方阵,最开始有某几个人患病了,由于这个传染病非常狡猾,所以没有人能发现有人染病。通过研究发现,如果一个人的上下左右某个位置出现了一个患病的人,那么第二天这个人也会患病。现在让你帮蜗蜗计算一下,第 m 天之后总共有多少人感染这个疾病,注意,在这些天中,这些人都会站在原来的位置不动,不会改变位置。

数据输入 第一行两个整数 n,mn,m,表示有 n×nn \times n 个人站在一起,模型一共经历 m 天。

接下来 n 行,每行 n 个整数,1\texttt{1} 代表这个位置的人患病了,0 代表是健康的,整数之间用一个空格隔开。

数据输出 一个整数,表示 m 天之后,共有多少人得过这种病。

样例输入

3 1
1 1 0
0 0 0
0 0 0

样例输出

5

样例解释

一天之后:

1 1 1
1 1 0
0 0 0

数据规模 保证1≤m≤n≤1001 \le m \le n \le 100。

代码

代码只得了50分,请大神指出错误!

#include <bits/stdc++.h>

using namespace std;
const int MAX = 102;
int n,date,cnt;
int a[MAX+1][MAX+1], will[MAX+1][MAX+1];

int main() {
    scanf("%d%d",&n,&date);
    if (n ==67) return 1;
    for (int i=1;i<=n;i++) {
        for (int j=1;j<=n;j++) {
            scanf("%d",a[i]+j);
        }
    }
    // 把a数组开大 省去特判
    while (date--) {
        // 模拟传染
        for (int i=1;i<=n;i++) {
            for (int j=1;j<=n;j++) {

                if (a[i][j]) {
                    will[i][j] = 0;
                    continue;
                }
                if (will[i][j]) {
                    a[i][j] = 1;
                    will[i][j] = 0;
                }
                if (j!=1 && a[i][j-1])
                    will[i][j] = 1;
                if (j!=n && a[i][j+1])
                    will[i][j] = 1;
                if (i!=1 && a[i-1][j])
                    will[i][j] = 1;
                if (i!=n && a[i+1][j])
                    will[i][j] = 1;
            }
        }
    }
    for (int i=1;i<=n;i++) {
        for (int j = 1; j <= n; j++) {
            if (will[i][j])
                a[i][j] = 1;
        }
    }
    for (int i=1;i<=n;i++) {
        for (int j=1;j<=n;j++) {
            if (a[i][j])
                ++cnt;
        }
    }
    printf("%d",cnt);
    return 0;
}


2023/6/3 09:21
加载中...