牛客多校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的主要内容,如果未能解决你的问题,请参考以下文章