求助,为什么我的程序输出的时候要-1
查看原帖
求助,为什么我的程序输出的时候要-1
631713
Amano_Hina楼主2022/5/21 22:35

rt,蒟蒻突发奇想想用线段树来做这道题,但不知道为啥我的程序要-1再输出:

Code:

#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;
}
2022/5/21 22:35
加载中...