问题是这样
有一个二分图,i 与i xor x 相连 求交叉数
考试是时间太赶没去想(T_T)
其实这题枚举的是a和b不同的最高位(Xor后 变的那位)
1 \ / 1
0 / \ 0
最高位长这样
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define F (1000000007)
#define MAXN (100+10)
#define For(i,n) for(int i=1;i<=n;i++)
#define LL long long
long long ans=0;
char s[MAXN];
long long sqr(long long a){return a*a%F;}
long long bin[1000];
int main()
{
scanf("%s",s+1);
int n=strlen(s+1);
bin[0]=1;For(i,999) bin[i]=(bin[i-1]*2)%F;
For(i,n) if (s[i]=='1') ans=(ans+(bin[i-1])%F*sqr(bin[n-i]))%F;
cout<<ans<<endl;
return 0;
}