在fenwick树中,要计算直到给定索引的总和,您将获得二进制字符串形式的索引,现在您必须计算使用树计算总和所涉及的步骤数?时间限制为1秒,字符串长度为< = 1000002000
实施例。输入: 4 001 100 011 4 1000 1101 100 3 1010 001 101 4 010 101 000 4 输出: 6 12 8 10
约束
1≤t≤300; 1≤长度(Li)≤1000; 1≤n≤10^ 6
我的方法:
#include <stdio.h>
#include <string.h>
int main(void)
{
int t,i,j,n,length,flag,pos,finalpos,zero,one;
char L1[1001],L2[1001],L3[1001];
long long int count;
scanf("%d",&t);
while(t--)
{
finalpos=0;
count=0;
scanf("%s %s %s %d",L1,L2,L3,&n);
length = strlen(L1)+n*strlen(L2)+strlen(L3)+1;
char L[length];
L[0]='\0';
strcat(L,L1);
for(i=0;i<n;i++)
strcat(L,L2);
strcat(L,L3);
for(i=0;i<=length-2;i++)
{
if(L[i]=='1')
{
finalpos=i;
break;
}
}
pos = length-2;
while(L[finalpos]=='1')
{
for(i=pos;i>=finalpos;i--)
{
if(L[i]=='0')
{
break;
}
else
L[i]='0';
}
if(L[finalpos]=='0')
break;
for(i=pos;i>=finalpos;i--)
{
if(L[i]=='1')
{
L[i]='0';
pos = i;
break;
}
else
L[i]='1';
}
count++;
}
printf("%lld\n",count+1);
}
return 0;
}