规律题
首先我们要知道他的顺序是怎么来的,首先当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[100]; ll bit2[100]; void solve(){ int n; cin>>n; ll m=1ll*1<<n; string s1,s2; cin>>s1>>s2; ll l=0,r=0; for(int i=1;i<=n;i++){ m>>=1; bit1[i]=s1[i-1]-'0'; bit1[i]^=bit1[i-1]; l+=bit1[i]*m; } m=1ll*1<<n; for(int i=1;i<=n;i++){ m>>=1; bit2[i]=s2[i-1]-'0'; bit2[i]^=bit2[i-1]; r+=bit2[i]*m; } cout<<r-l-1<<endl; } int main(){ solve(); return 0; }