题解 CF887B 【Cubes for Masha】
yutong_Seafloor · · 题解
题目在这里 · Cubes for Masha CF887B
题目简要:
有几个方块,现在这几个方块要组成数字(组成数字范围在
注意这个最大指的是它前面(也就是 因为这个样例错了好几次。
题意分析
我们要知道一点:组成的数字只能是两个不同方块上的,一个方块上的是不存在的,那我们就可以简单的模拟一下,把方块一的数字和方块二的一一配对,这里还要注意下单独一个方块也要算上一个数字。
所以在这里又双叒叕提出一种改良方法:
- 我们在做一次双方块循环的时候把正着来和反着来一起标记,如图:
有人就要说了,啊这个已经有人写了你发他干什么啊,那么为了节约循环,我们再改良。
- 第二个方块的循环初始值我们直接是第一个方块
+1 的初始值,这样就可以免除判断并且省时间,方便理解贴一张图吧。
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[5][10],i,j,l,k,jg[100];
int main()
{
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=6;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=6;j++)
for(k=i;k<=n;k++)
if(i!=k)
for(l=1;l<=6;l++)
{
jg[a[i][j]]=1;
jg[a[k][l]]=1;
jg[a[i][j]*10+a[k][l]]=1;
jg[a[i][j]+a[k][l]*10]=1;
}
for(i=1;i<=99;i++)
if(jg[i]==0)
{
cout<<i-1;
return 0;
}
cout<<"0";
}
这里要注意几个点:
- 我们找的时候找的是无法输出的最大数,那么能输出的要
-1 。 - 最后不要忘了
cout<<"0";!