题解 CF887B 【Cubes for Masha】

· · 题解

题目在这里 · Cubes for Masha CF887B

题目简要:

有几个方块,现在这几个方块要组成数字(组成数字范围在 099 之间),我们要找出它最大可以组成的数字。

注意这个最大指的是它前面(也就是 1 到这个数字)的数字都可以组出,不是能组出来的最大数字,因为这个样例错了好几次

题意分析

我们要知道一点:组成的数字只能是两个不同方块上的,一个方块上的是不存在的,那我们就可以简单的模拟一下,把方块一的数字和方块二的一一配对,这里还要注意下单独一个方块也要算上一个数字

所以在这里又双叒叕提出一种改良方法:

  1. 我们在做一次双方块循环的时候把正着来和反着来一起标记,如图:

有人就要说了,啊这个已经有人写了你发他干什么啊,那么为了节约循环,我们再改良。

  1. 第二个方块的循环初始值我们直接是第一个方块 +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. 我们找的时候找的是无法输出的最大数,那么能输出的要 -1
  2. 最后不要忘了 cout<<"0";