求助今日ABC的D题
  • 板块学术版
  • 楼主xmy201315
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/11/2 21:43
  • 上次更新2024/11/3 09:36:42
查看原帖
求助今日ABC的D题
1259915
xmy201315楼主2024/11/2 21:43

help me

code:

#include <bits/stdc++.h>
using namespace std;
int h,w,k;
char s[20][20];
const int D[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int dist[15][15],q[1000][2];
inline void bfs(int i,int j){
	memset(dist,255,sizeof(dist));
	int f=1,r=1;
	q[1][0]=i,q[1][1]=j;
	dist[i][j]=0;
	while(f<=r){
		int x=q[f][0],y=q[f][1];
		++f;
		for(int i=0;i<4;i++){
			int xx=x+D[i][0],yy=y+D[i][1];
			if(xx<1||xx>h||yy<1||yy>w)continue;
			if(s[xx][yy]!='#'&&dist[xx][yy]==-1)
				dist[xx][yy]=dist[x][y]+1,q[++r][0]=xx,q[r][1]=yy;
		}
	}
	memset(q,0,sizeof(q));
}
int main(){
	cin>>h>>w>>k;
	for(int i=1;i<=h;i++)
		for(int j=1;j<=w;j++){
			char t;
			cin>>t;
			s[i][j]=t;
		}int ans=0,s1=0;
	for(int i=1;i<=h;i++){
		for(int j=1;j<=w;j++){
			if(s[i][j]=='#')continue;
			bfs(i,j);
			for(int u=1;u<=h;u++)
				for(int l=1;l<=w;l++){
					if(dist[u][l]==k)ans++;
				}
//			for(int t=1;t<=h;t++){
//				for(int g=1;g<=w;g++)
//					cout<<dist[t][g]<<' ';
//				puts("");
//			}puts("\n\n\n");
//			s1++;
			memset(dist,0,sizeof(dist));
		}
	}int l=0;
	for(int i=1;i<=h;i++)
		for(int j=1;j<=w;j++)
			if(s[i][j]=='.')l++;
	cout<<ans<<endl;		
}

nn

2024/11/2 21:43
加载中...