Codeforces Round #444(Div.2) B. Cubes for Masha

本文介绍了一个有趣的数学问题,即利用有限数量的魔方来拼凑出从1开始的连续整数序列,目标是找到能完整拼出的最大整数。通过两轮组合魔方上的数字,并采用标记数组的方法,最终确定了最大可能的整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B. Cubes for Masha
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Absent-minded Masha got set of n cubes for her birthday.

At each of 6 faces of each cube, there is exactly one digit from 0 to 9. Masha became interested what is the largest natural x such she can make using her new cubes all integers from 1 to x.

To make a number Masha can rotate her cubes and put them in a row. After that, she looks at upper faces of cubes from left to right and reads the number.

The number can't contain leading zeros. It's not required to use all cubes to build a number.

Pay attention: Masha can't make digit 6 from digit 9 and vice-versa using cube rotations.

Input

In first line integer n is given (1 ≤ n ≤ 3) — the number of cubes, Masha got for her birthday.

Each of next n lines contains 6 integers aij (0 ≤ aij ≤ 9) — number on j-th face of i-th cube.

Output

Print single integer — maximum number x such Masha can make any integers from 1 to x using her cubes or 0 if Masha can't make even 1.

Examples
input
3
0 1 2 3 4 5
6 7 8 9 0 1
2 3 4 5 6 7
output
87
input
3
0 1 3 5 6 8
1 2 4 5 7 8
2 3 4 6 7 9
output
98
Note

In the first test case, Masha can build all numbers from 1 to 87, but she can't make 88 because there are no two cubes with digit 8.


题意:给你n个魔方,每个魔方有六个面,每个面上有一个属于1~9的数字。问你能够用这个魔方拼成的最大数x,这个最大数的意思是1~x都能由魔方上的数字组成(可以不使用所有的魔方)

思路:因为要求的最大数x是要求1~x都能拼装出,那么其实最大数就是98了,因为如果是99的话那么就肯定需要1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9这十八个数字,再加上10的话还有一个数字0,那么就是十九个数字了,而至多三个魔方,最多只能有十八个数。所以就可以遍历1~99并且记录下来那些数能被组成,用vis标记即可。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main()
{
    int i,j,k,t,n,vis[150];
    memset(vis,0,sizeof(vis));
    int a[5][10];
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=6;j++)
        {
            scanf("%d",&a[i][j]);
            vis[a[i][j]]=1;
        }
    for(i=1;i<=n;i++)
        for(j=1;j<=6;j++)
        {
            for(k=1;k<=n;k++)
            {
                if(k==i) continue;
                for(t=1;t<=6;t++)
                    vis[a[i][j]*10+a[k][t]]=1;
            }
        }
    for(i=1;i<=99;i++)
    {
        if(!vis[i])
        {
            printf("%d\n",i-1);
            break;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值