#include #include #include #include #include #include #define MODC 1000000007 using namespace std; vector> tab; int compute(string & r, int pos, int ones) { if(pos<=r.size() && ones==0) return 1; if(pos>=r.size() || ones<=0) return 0; int res=0; if(r[pos]=='1') { res+=tab[r.size()-pos-1][ones]; res%=MODC; //cout<>n>>k; tab=vector>(n+1, vector(k+1)); for(int i=0; i<=k; i++) { tab[0][i]=0; } tab[0][0]=1; for(int i=1; i<=n; i++) { for(int j=0; j<=k; j++) { tab[i][j]=tab[i-1][j]+tab[i-1][j-1]; tab[i][j]%=MODC; //cout<>c; r+=c; } int res; string newr=r; int presun=0; //int last=r.size()-1; for(int i=r.size()-1; i>=0; i--) { int tmp=presun+1+(newr[i]-'0'); newr[i]='0'+(tmp%2); presun=tmp/2; } if(presun==1) newr="1"+newr; //cout<