提交时间:2025-05-23 13:23:03

运行 ID: 37875

#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=10005; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m; string s[105]; bool ok[105][105],flg[105][105]; const int dx[]={1,-1,0,0},dy[]={0,0,1,-1}; bool chk(int i,int j){if(i<1||i>n||j<1||j>m)return 1;return s[i][j]=='#'||ok[i][j];} vector<pi>nd; void dfs(int x,int y){ flg[x][y]=1;nd.p_b(m_p(x,y)); up(p,0,3){ int px=x+dx[p],py=y+dy[p]; if(px<1||px>n||py<1||py>m||s[px][py]=='#'||(!ok[px][py])||flg[px][py])continue; if(chk(px+dx[p],py+dy[p])) dfs(px,py); } } void slv(){ n=read(),m=read(); up(i,1,n)cin>>s[i],s[i]=" "+s[i]; vector<pi>A,B; up(i,1,n){ up(j,1,m){ if(s[i][j]>='a'&&s[i][j]<='z')A.p_b(m_p(i,j)); if(s[i][j]>='A'&&s[i][j]<='Z')B.p_b(m_p(i,j)); } } vector<pair<char,char> >ans; for(auto y:B){ vector<pi>vec; up(i,1,n)up(j,1,m){if(s[i][j]!='#'&&s[i][j]!='*')ok[i][j]=1,vec.p_b(m_p(i,j));else ok[i][j]=0;flg[i][j]=0;} while(1){ nd.clear();dfs(y.p1,y.p2); if(nd.size()==vec.size())break; for(auto it:vec)ok[it.p1][it.p2]=flg[it.p1][it.p2],flg[it.p1][it.p2]=0; vec=nd; } for(auto x:A) if(ok[x.p1][x.p2]) ans.p_b(m_p(s[x.p1][x.p2],s[y.p1][y.p2])); } sort(ans.begin(),ans.end()); if(ans.empty())printf("NONE"); else for(auto it:ans)printf("%c%c ",it.p1,it.p2); printf("\n"); } int main(){ //freopen("walk.in","r",stdin),freopen("walk.out","w",stdout); int t=read(); up(i,1,t){ printf("Case #%d: ",i); slv(); } return 0; }