比赛 2024暑期C班集训1 评测结果 WWAAAAWWWWWWWWWWWWWW
题目名称 艾姆易艾克斯 最终得分 20
用户昵称 123 运行时间 0.329 s
代码语言 C++ 内存使用 1.48 MiB
提交时间 2024-07-01 11:30:05
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
const long long INF=1e9+7;
map <int,int> flaga,flagb;
int a[N],b[N];
int n,mi=0,cnt=0;
void dfs(int step)
{
    if (step==n+1)
    {
        for (int i=0;i<mi;i++)
        {
            if (flaga[i]==0)
            {
                return ;
            }
        }
        if (flaga[mi])
        {
            return ;
        }
        else
        {
            cnt++;
            return ;
        } 
    }
    flaga[a[step]]--;
    flaga[b[step]]++;
    flagb[a[step]]++;
    flagb[b[step]]--;
    dfs(step+1);
    flaga[a[step]]++;
    flaga[b[step]]--;
    flagb[a[step]]--;
    flagb[b[step]]++;
    dfs(step+1);
}
void find()
{
    for (int i=1;i<=n;i++)
    {
        if (a[i]!=b[i])
        {
            flaga[a[i]]--;
        }
    }
    while (1)
    {
        if (flaga[mi]<=0)
        {
            cout<<mi<<" ";
            break;
        }
        mi++;
    }
}
long long change(int n)
{
    int ret=1;
    while (n--)
    {
        ret=ret*2%INF;
    }
    return ret;
}
int main() {
    freopen("Mex.in","r",stdin);
    freopen("Mex.out","w",stdout);
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        flaga[a[i]]++;
    }
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&b[i]);
        flagb[b[i]]++;
    }
    find();
    if (n<=15)
    {
        dfs(1);
        printf("%d",cnt);
        return 0;
    }
    for (int i=0;;i++)
    {
        if (!flaga[i])
        {
            printf("%lld",change(i));
            return 0;
        }
    }
}