rt,蒟蒻突发奇想想用线段树来做这道题,但不知道为啥我的程序要-1再输出:
#include <bits/stdc++.h>
#define MAX_N 5000
using namespace std;
struct Node
{
int l,r,num;
} tree[MAX_N*4];
int a[10];
unsigned long long int gcd(unsigned long long int a,unsigned long long int b)
{
return b ? gcd(b,a%b) : a;
}
unsigned long long int lcm(unsigned long long int a,unsigned long long int b)
{
return a*b/gcd(a,b);
}
void build(int now,int l,int r)
{
tree[now].l=l;tree[now].r=r;
int mid=(l+r)/2;
if(mid==l&&mid==r&&r==l)
{
tree[now].num=a[l];
return;
}else{
build(now*2,l,mid);
build(now*2+1,mid+1,r);
tree[now].num=tree[now*2].num+tree[now*2+1].num;
}
}
int add(int now,int l,int r)
{
int mid=(tree[now].l+tree[now].r)/2;
if(mid==l&&mid==r&&l==r)
{
return tree[now].num;
}else{
return add(now*2,l,mid)+add(now*2+1,mid+1,r);
}
}
int main()
{
char c[15];
int len=0;
memset(c,'_',13);
cin>>c+1;
for(int i=1;i<=12;i++)
{
if(c[i]=='_')
{
break;
}else{
len++;
if(c[i]=='0')
{
a[i]=0;
}else{
a[i]=1;
}
}
}
build(1,1,len);
cout<<add(1,1,len);
return 0;
}