Mr. Frog’s Game HDU
阿新 • • 發佈:2018-12-13
分類:搜尋
2018TYUT秋季ACM模擬賽(14)2016CCPC東北地區
題意:連連看,問給出的局面中是否可以消去一對。
思路:邊界消得情況,裡面兩個相連消得情況,分類看一下,找到變break輸出
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; int map[33][33]; int a[4][33]; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; bool f(int s[],int n) { for(int i=0;i<n-1;i++) if(s[i]==s[i+1]) return 1; return 0; } int main() { int t,kcase=0; int n,m; scanf("%d",&t); while(t--) { memset(map,0,sizeof(map)); memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { scanf("%d",&map[i][j]); if(i==0) a[0][j]=map[i][j]; if(i==n-1) a[1][j]=map[i][j]; if(j==0) a[2][i]=map[i][j]; if(j==m-1) a[3][i]=map[i][j]; } sort(a[0],a[0]+m); sort(a[1],a[1]+m); sort(a[2],a[2]+n); sort(a[3],a[3]+n); int flag=0; if(f(a[0],m)) flag=1; else if(f(a[1],m)) flag=1; else if(f(a[2],n)) flag=1; else if(f(a[3],n)) flag=1; //cout<<flag<<endl; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int center=map[i][j]; for(int k=0;k<4;k++) { int ux=i+dx[k]; int uy=j+dy[k]; if(ux<0||uy<0||ux>=n||uy>=m) continue; if(map[ux][uy]==center) { flag=1; break; } } if(flag) break; } if(flag) break; } //cout<<flag<<endl; printf("Case #%d: ",++kcase); if(flag) printf("Yes\n"); else printf("No\n"); } }