NC信奥 T4 病毒

· · 个人记录

50分

#include<bits/stdc++.h>

using namespace std;

int n,m;
char a[1020][1020];
int f[1021][1021];
int main(){
    cin>>n>>m;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j]=='*'){
                f[i][j] = 1;
            }
        }
    }
    while(1){
        int cnt = 0;
        for(int i = 1;i<=n;i++){
            for(int j = 1;j<=m;j++){
                if(f[i][j-1]+f[i+1][j]+f[i-1][j]+f[i][j+1]>=2 && f[i][j]==0 && a[i][j]=='o') f[i][j] = 1,cnt++;
            }
        }   
        if(cnt==0) break;
    }
    for(int i = 1;i<=n;i++,cout<<endl){
        for(int j = 1;j<=m;j++){
            if(a[i][j]=='#') cout<<'#';
            else{
                if(f[i][j]) cout<<'*';
                else cout<<'o';
            }
        }
    }

    return 0; 
} 

100分

#include<bits/stdc++.h>

using namespace std;

int n,m;
char a[1001][1001];
int vis[1001][1001];
queue<pair<int,int> > q;

int main(){
    cin>>n>>m;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            if(a[i][j]=='*'){
                q.push({i,j});
            }
        }
    }
    while(!q.empty()){
        pair<int,int> tmp = q.front();
        q.pop();
        vis[tmp.first+1][tmp.second]++;
        if(vis[tmp.first+1][tmp.second]>=2 && a[tmp.first+1][tmp.second]=='o'){
            vis[tmp.first+1][tmp.second] = INT_MIN;
            a[tmp.first+1][tmp.second] = '*';
            q.push({tmp.first+1,tmp.second});
        }
        vis[tmp.first][tmp.second-1]++;
        if(vis[tmp.first][tmp.second-1]>=2 && a[tmp.first][tmp.second-1]=='o'){
            vis[tmp.first][tmp.second-1] = INT_MIN;
            a[tmp.first][tmp.second-1] = '*';
            q.push({tmp.first,tmp.second-1});
        }
        vis[tmp.first][tmp.second+1]++;
        if(vis[tmp.first][tmp.second+1]>=2 && a[tmp.first][tmp.second+1]=='o'){
            vis[tmp.first][tmp.second+1] = INT_MIN;
            a[tmp.first][tmp.second+1] = '*';
            q.push({tmp.first,tmp.second+1});
        }
        vis[tmp.first-1][tmp.second]++;
        if(vis[tmp.first-1][tmp.second]>=2 && a[tmp.first-1][tmp.second]=='o'){
            vis[tmp.first-1][tmp.second] = INT_MIN;
            a[tmp.first-1][tmp.second] = '*';
            q.push({tmp.first-1,tmp.second});
        }
    }
    for(int i = 1;i<=n;i++,cout<<endl){
        for(int j = 1;j<=n;j++) cout<<a[i][j];
    }

    return 0;
}