社区讨论

求条 D

学术版参与者 4已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mhj40sh6
此快照首次捕获于
2025/11/03 20:22
4 个月前
此快照最后确认于
2025/11/03 20:22
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>

#define i64 long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define fdn(i,r,l) for(int i=(r);i>=(l);i--)
#define pii pair<int,int>
using namespace std;

typedef long long ll;
typedef double db;
typedef __int128 i128;

std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
std::mt19937_64 rnd64(std::chrono::steady_clock::now().time_since_epoch().count());

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);

    const int dx[]={0,0,-1,1};
    const int dy[]={-1,1,0,0};
    int H,W;
    cin>>H>>W;
    vector<vector<int>> S(H+1,vector<int>(W+1,0));
    rep(i,1,H) rep(j,1,W) 
    {
        char ch; cin>>ch; if(ch=='#') S[i][j]=1;
    }
    vector<vector<int>> f(H+1,vector<int>(W+1,0));
    vector<vector<int>> vis(H+1,vector<int>(W+1,0));
    queue<pair<int,int>> q;
    rep(i,1,H) rep(j,1,W) if(S[i][j]) q.push({i,j}),f[i][j]=1;
    while(!q.empty())
    {
        auto [x,y]=q.front(); q.pop();
        if(f[x][y]!=1||vis[x][y]) continue; 
        S[x][y]=1,vis[x][y]=1; // 正式确定染黑。
        rep(d,0,3)
        {
            int xx=x+dx[d],yy=y+dy[d];
            if(xx<1||xx>H||yy<1||yy>W||S[xx][yy]) continue; // 剪纸:如果是黑色的不必搜,因为已经考虑过了。
            f[xx][yy]++; // 初步被筛选为待染黑,增加贡献
            q.push({xx,yy});
        }
    }
    int ans=0;
    rep(i,1,H) rep(j,1,W) if(S[i][j]) ans++;
    cout<<ans<<endl;
}

我知道是没有处理好轮次,但是为什么呢?

回复

7 条回复,欢迎继续交流。

正在加载回复...