求条
  • 板块灌水区
  • 楼主SM_929hz
  • 当前回复15
  • 已保存回复18
  • 发布时间2025/2/8 15:05
  • 上次更新2025/2/8 16:57:45
查看原帖
求条
1364135
SM_929hz楼主2025/2/8 15:05

一道站外题QwQ 广东石中出的

沙漠化(2010石中创新班)

描述

Bob的小岛面临沙漠化的问题. Bob的小岛是一个R行C列的矩阵.

如果某个单元格是 'D',则表示该格子是沙漠,如果是'F'则表示该格子是森林。沙漠每年蔓延的趋势是:

(1)如果某格子是沙漠,则它永远都是沙漠。

(2)如果一个格子是森林,而且它相邻的四个格子(上、下、左、右)中如果至少有一个格子是沙漠,那么该格子的森林下一年将会变成沙漠。否则,该格子下一年还是森林.

问题是:过了T年后,小岛共有多少个格子是沙漠?

输入

第一行:三个整数,R、C、T. 1 <= R,C <= 1000,1<= T<=1000000000。

接下来是R行C列的矩阵。每个元素要么上‘D’要么是‘F’。

输出

一个整数,过了T年后,小岛共有多少个格子是沙漠?

输入格式 无

输出格式 无

输入/输出例子1 输入:5 5 2 FFFFF FFDFF FFFFD FFFFF FFFFF

输出:17

本蒟蒻的代码

#include<bits/stdc++.h>
using namespace std;
int n,m,t,ans,s,Map[1005][1005];
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
char c;
int js(){
    int k=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
             k+=Map[i][j];
    return k;
}
void bfs(){
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(Map[i][j])
                for(int k=0;k<4;k++){
                    int tx=dx[k]+i,ty=dy[k]+j;
                    if(tx>=1&&tx<=n&&ty>=1&&ty<=n)
                        Map[tx][ty]=1;
                }
    if(js()==m*n){
        cout<<m*n;
        exit(0);
    }
}
int main(){
    cin>>n>>m>>t;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
             cin>>c;
             if(c=='D')
                 Map[i][j]=1;
             else
                 Map[i][j]=0;
         }
    bfs();
    cout<<js();
    return 0;
}

球球了ε=ε=ε=(#>д<)ノ

今天我做不出来我就4了w(゚Д゚)w

救救孩子吧

2025/2/8 15:05
加载中...