羊了个羊
题目背景
这是一只羊
这款游戏第一关十分简单,第二关十分煎蛋
题目描述
游戏规则是:
1:消除所有卡牌获胜
2:一次只能消除最面上的牌
3:你有一个卡槽,只能存放7张牌
4:三张同样的牌存在卡槽中才能消除
5:一共有n层,你只能消除最上面的牌
你要判断你这可不可以获胜
输入格式
第一行输入 n,表示层数
接下来一行输入 x ,表示有几种不同的物品
接下来一行输入 m ,表示矩阵边长
接下来输入n个矩阵
输出格式
可以获胜输出Yes,不可以输出No
样例 #1
样例输入 #1
2
3
3
1 2 3
2 1 3
1 3 2
3 1 2
2 1 3
1 3 2
样例输出 #1
Yes
提示
n < 10,x < 10,3 > m < 10
我肝出来了一个错误代码:
#include<bits/stdc++.h>
#define For(i,a,b) for(int i = a;i < b;i++)
#define ll long long
#define ull unsigned long long
#define loop while(true)
#define Top 0
using namespace std;
bool over2(int f[])
{
for(int i = 0;i < 11;i++)
if(f[i] > 2) return true;
return false;
}
int n,m,x,a[11][11][11],card[8],idx = 0,f[11];
bool over()
{
For(i,0,11)
For(j,0,11)
For(k,0,11)
if(a[i][j][k] != -1)
return false;
return true;
}
int main()
{
scanf("%d%d%d",&n,&x,&m);
for(int i = 0;i < n;i++)
for(int j = 0;j < m;j++)
for(int k = 0;k < m;k++)
scanf("%d",&a[i][j][k]);
while(over())
{
For(i,0,m)
For(j,0,m)
f[a[Top][i][j]]++;
bool pass = over2(f);
if(pass == false) cout<<"No";
for(int i = 1;i < 11;i++)
{
if(f[i] >= 3)
{
int cnt = 0;
for(int j = 0;j < m;j++)
for(int k = 0;k < m;k++)
{
if(cnt == 3) goto jump_to_this;
if(a[0][j][k] == i)
{
cnt++;
a[0][j][k] = -1;
for(int q = 0;q < 11;q++)
swap(a[q][j][k],a[q+1][j][k]);
}
}
}
jump_to_this:
continue;
}
}
cout<<"Yes";
return 0;
}
有什么想法可以留言,谢谢