H - Hamiltonian Hypercube Gym - 101170H

时间:2022-04-11 06:04:30

规律题

首先我们要知道他的顺序是怎么来的,首先当n等于1时,是0,1 当n=2时,先按照与按顺序在他们前面分别加0,即00,01,在逆序加1,即11,10 构成的顺序为00,01,11,10;往后同理

规律,顺序排好后,对某个字符,我们对前n项求异或 即arr[i]^=arr[i-1],就可以将其转换为对应的二进制形式,值得注意的地方就是要用ll,还有就是二进制转换为10进制的过程

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll bit1[];
ll bit2[];
void solve(){
int n;
cin>>n;
ll m=1ll*<<n;
string s1,s2;
cin>>s1>>s2;
ll l=,r=;
for(int i=;i<=n;i++){
m>>=;
bit1[i]=s1[i-]-'';
bit1[i]^=bit1[i-];
l+=bit1[i]*m;
}
m=1ll*<<n;
for(int i=;i<=n;i++){
m>>=;
bit2[i]=s2[i-]-'';
bit2[i]^=bit2[i-];
r+=bit2[i]*m;
}
cout<<r-l-<<endl;
}
int main(){
solve();
return ;
}