微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

B. Curiosity Has No Limits cf1072(div2)

对于上面下面两个数字一旦确定,他们的解就确定了。所以可以4*4枚举头两个数字的所有可能,定下第二个数字,后面的数字就能一个个定下来。如果有一种能满足题意的结果就输出

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
int a[100010];
int b[100010];
vector<int> vec;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n-1;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n-1;i++)
    {
        scanf("%d",&b[i]);
    }
    for(int i=1;i<=n-1;i++)
    {
        if(a[i]==2&&b[i]==1||a[i]<b[i])
        {
            printf("NO\n");
            return 0;
        }
    }
    for(int i=0;i<=3;i++)
    {
        for(int j=0;j<=3;j++)
        {
            if((i|j)==a[1]&&(i&j)==b[1])
            {
                vec.clear();
                vec.push_back(i);
                vec.push_back(j);
                int k=2;
                for(;k<=n-1;k++)
                {
                    int last=*(vec.end()-1);
                    bool flag=false;
                    for(int index=0;index<=3;index++)
                    {
                        if( (index|last)==a[k]&&(index&last)==b[k] )
                          vec.push_back(index),flag=true;;//index是确定的,暴力是为了求值 
                    }
                    if(!flag)
                      break;
                }
                if(k==n)
                {
                    printf("YES\n");
                    for(int l=0;l<vec.size();L++)
                       printf("%d ",vec[l]);
                    printf("\n");
                    return 0;
                }
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。