Mr. Frog’s Game
因为数据量很小,所以直接暴力即可。先检查一下有没有相邻的可以消除,再检查一下同一条边界上可以消除的(根据游戏规则,如果两个方块可以消除且不相邻,只有可能在同一条边界上)
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#include <iostream> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <list> #include <set> #include <map> #include <cctype> #include <string> #include <queue> #define debug printf("debugn") #define mst(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn=1e5+5; ll gra[35][35]; ll kase=0; void (ll n,ll m) { for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) if(gra[i][j]==gra[i-1][j]||gra[i][j]==gra[i+1][j]||gra[i][j]==gra[i][j-1]||gra[i][j]==gra[i][j+1]){ printf("Case #%lld: Yesn",++kase); return ; } for(ll j=1;j<=m;j++){ for(ll k=j+1;k<=m;k++){ if(gra[1][j]==gra[1][k]){ printf("Case #%lld: Yesn",++kase); return ; } } } for(ll j=1;j<=m;j++){ for(ll k=j+1;k<=m;k++){ if(gra[n][j]==gra[n][k]){ printf("Case #%lld: Yesn",++kase); return ; } } } for(ll i=1;i<=n;i++){ for(ll k=i+1;k<=n;k++){ if(gra[i][1]==gra[k][1]){ printf("Case #%lld: Yesn",++kase); return ; } } } for(ll i=1;i<=n;i++){ for(ll k=i+1;k<=n;k++){ if(gra[i][m]==gra[k][m]){ printf("Case #%lld: Yesn",++kase); return ; } } } printf("Case #%lld: Non",++kase); return ; } int main() { ll t; cin>>t; while(t--) { mst(gra,0x3f); ll n,m; cin>>n>>m; for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) cin>>gra[i][j]; solve(n,m); } return 0; }
|
近期评论