5461.仅含1的子串数
1 int numSub(char * s){ 2 int n=strlen(s),index=0,i; 3 long long sum=0; 4 char a[n+2]; 5 a[0]='0'; 6 a[n+1]='0'; 7 long long zeros[100002]; 8 long long nums[100002]; 9 for(i=0;i<n;i++) 10 { 11 a[i+1]=s[i]; 12 } 13 for(i=0;i<n+2;i++) 14 { 15 if(a[i]=='0') 16 { 17 zeros[index++]=i; 18 } 19 } 20 for(i=0;i<index-1;i++) 21 { 22 nums[i]=zeros[i+1]-zeros[i]-1; 23 } 24 for(i=0;i<index-1;i++) 25 { 26 sum+=nums[i]*(nums[i]+1)/2; 27 } 28 return sum%1000000007; 29 30 }