50分求调
查看原帖
50分求调
1009001
HCA_ac_life楼主2024/7/13 17:24

#include<bits/stdc++.h> using namespace std; int r,c;```cpp #include<bits/stdc++.h> using namespace std; int r,c; char kb[52][52];bool vis[52][52]; int t,ans;string s; struct step{ int x,y,dis; }; step ns=(step){1,1,0}; queueq; int dx[4]={0,0,-1,1}; int dy[4]={-1,1, 0,0}; void bfs(int x,int y,char g){ bool flag=0; if(kb[x][y]==g){ ans+=1; return; } q.push((step){x,y,0}); vis[x][y]=1; while(!q.empty()){ step now=q.front();q.pop(); for(int i=0;i<4;i++){ int nx=now.x+dx[i],ny=now.y+dy[i]; while(kb[now.x][now.y]==kb[nx][ny]){ nx+=dx[i];ny+=dy[i]; if(nx<1||nx>r||ny<1||ny>c){ break; flag=1; } } if(flag){ flag=0; continue; } if(vis[nx][ny]==1)continue; if(kb[nx][ny]==g){ ns.x=nx;ns.y=ny; // cout<<g<<" "<<ans<<endl; ans+=(now.dis+2); return; } q.push((step){nx,ny,now.dis+1}); vis[nx][ny]=1; } } } int main(){ // cin>>t; // while(t--){ cin>>r>>c; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin>>kb[i][j]; cin>>s; for(int i=0;i<s.length();i++){ bfs(ns.x,ns.y,s[i]); memset(vis,0,sizeof(vis)); while(!q.empty())q.pop(); ns.dis=0; } bfs(ns.x,ns.y,'*'); cout<<ans<<endl; //} return 0; }


char kb[52][52];bool vis[52][52];
int t,ans;string s;
struct step{
	int x,y,dis;
};
step ns=(step){1,1,0};
queue<step>q;
int dx[4]={0,0,-1,1};
int dy[4]={-1,1, 0,0};
void bfs(int x,int y,char g){
	bool flag=0;
	if(kb[x][y]==g){
		ans+=1;
		return;
	}
	q.push((step){x,y,0});
	vis[x][y]=1;
	while(!q.empty()){
		step now=q.front();q.pop();
		for(int i=0;i<4;i++){
			int nx=now.x+dx[i],ny=now.y+dy[i];
			while(kb[now.x][now.y]==kb[nx][ny]){
				nx+=dx[i];ny+=dy[i];
				if(nx<1||nx>r||ny<1||ny>c){
					break;
					flag=1;
				}
			}
			if(flag){
				flag=0;
				continue;
			}
			if(vis[nx][ny]==1)continue;
			if(kb[nx][ny]==g){
				ns.x=nx;ns.y=ny;
			//	cout<<g<<" "<<ans<<endl;
				ans+=(now.dis+2);
				return;
			}
			q.push((step){nx,ny,now.dis+1});
			vis[nx][ny]=1;
		}
	}
}
int main(){
//	cin>>t;
//	while(t--){
		cin>>r>>c;
		for(int i=1;i<=r;i++)
			for(int j=1;j<=c;j++)
				cin>>kb[i][j];
		cin>>s;
		for(int i=0;i<s.length();i++){
			bfs(ns.x,ns.y,s[i]);
			memset(vis,0,sizeof(vis));
			while(!q.empty())q.pop();
			ns.dis=0;
		}
		bfs(ns.x,ns.y,'*');
		cout<<ans<<endl;
	//} 
	return 0;
}
2024/7/13 17:24
加载中...