萌新唐大完,求条 ABC C
  • 板块学术版
  • 楼主da_ke
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/7 23:42
  • 上次更新2024/12/8 11:28:22
查看原帖
萌新唐大完,求条 ABC C
766675
da_ke楼主2024/12/7 23:42
#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());

const int dx[]={1,-1,0,0};
const int dy[]={0,0,-1,1};

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);
    int N,M,D;
    cin>>N>>M>>D;
    vector<vector<char>> buf(N+1,vector<char>(M+1)); 
    vector<vector<int>> dis(N+1,vector<int>(M+1,1<<30)); 
    vector<vector<bool>> vis(N+1,vector<bool>(M+1,0)); 
    rep(i,1,N) rep(j,1,M) cin>>buf[i][j];
    queue<pair<int,int>> q;
    rep(i,1,N) rep(j,1,M) if(buf[i][j]=='H') q.push({i,j}),dis[i][j]=0;
    while(!q.empty())
    {
        int x=q.front().first,y=q.front().second;
        q.pop();
        if(vis[x][y]) continue;
        vis[x][y]=1;
        rep(d,0,3)
        {
            int xx=x+dx[d],yy=y+dy[d];
            if(xx<1||xx>N||yy<1||yy>M||buf[xx][yy]=='#') continue;
            dis[xx][yy]=dis[x][y]+1;
            if(dis[xx][yy]<=D) q.push({xx,yy});
        }
    }
    int ans=0;
    rep(i,1,N) rep(j,1,M) if(dis[i][j]<=D) ans++; 
    cout<<ans;
}

被样例创废了。

2024/12/7 23:42
加载中...