T1
通过观察奖励箱的位置,发现一个规律:
当这个数对应的二进制数中1的个数为奇数时,它就是奖励箱
于是根据这个规律,通过爆搜查找并存储n以内所有的奖励箱
最后计算结果
code
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int a[100000],k;
long long b[100000],ans=0,d[100000],tot=0;
set<long long> c;
string n;
long long qiuzhi(long long ws)
{
long long sum=0;
for(int i=0;i<=ws;i++) if(a[i]==1) sum+=(1<<i);
return sum;
}
void dfs(bool f,long long ws,string s)
{
if(ws>n.size()||(ws==n.size()&&s>=n)) return;
if(f) c.insert(qiuzhi(ws));
a[ws]=1;
dfs(!f,ws+1,"1"+s);
a[ws]=0;
dfs(f,ws+1,"0"+s);
}
long long power(long long a,long long b)
{
long long result=1