牛客多校8 D

Posted 吃花椒的妙酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客多校8 D相关的知识,希望对你有一定的参考价值。

 思路:a+b == a|b + a&b(数电太拉了,重新学习了

枚举a1的每一位是0还是1,然后O(n)check

简单说下check

 now表示a1第i位是0还是1

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
using namespace std;
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define pb push_back
#define IOS ios::sync_with_stdio(false)
#define int long long
#define inf 0x3f3f3f3f
typedef long long ll;
const int N=1e5+10;
int n;
int a[N],b[N],c[N];
bool check(int x, int y)
{
    int last=x;
    for(int i=2 ;i<=n ;i++)
    {
        if( last )
        {
            if( !((b[i]>>y)&1) ) return false;
            if( (c[i]>>y)&1 ) last = 1;
            else last=0;
        }
        else
        {
            if( (c[i]>>y)&1 ) return false;
            if( (b[i]>>y)&1 ) last=1;
            else last=0;
        }
    }
    return true;
}
signed main()
{
    ///!!!
//    freopen("data.txt","r",stdin);
    //!!!=
    IOS;
    cin>>n;
    _for(i,2,n) cin>>b[i];
    _for(i,2,n) cin>>c[i],c[i] = (c[i]-b[i]);
    int ans=1;
    for(int i=0 ;i<=30 ;i++)
    {
//        cout<<i<<endl;
        int flag=0;
        if( check(1,i) ) flag++;
        if( check(0,i) ) flag++;
        if( !flag ) return cout<<0,0;
        if(flag==2 ) ans<<=1;
    }
    cout<<ans;
}

以上是关于牛客多校8 D的主要内容,如果未能解决你的问题,请参考以下文章

2021牛客多校8 D OR

牛客多校8.D.OR 二进制+思维

2021牛客多校2 D Er Ba Game

2021牛客多校1 D Determine the Photo Position

2021牛客多校7 Fxay loves trees

牛客多校8.K.Yet Another Problem About Pi 计算几何/思维