2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation

2020牛客暑期多校训练营(第九场)—— Groundhog and 2-Power Representation

2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation_第1张图片

输入

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输出

1315

备注


The range of answers :[10,10^180],and the length of the input data shall not exceed 20000.

题目大意

输入计算式,求解。其中 2(x) 表示 2 的 x 次方,式中每一项都对应着答案在二进制表示下的数位为1的位。

题解

朴素的递归思想,模拟从里到外去括号的过程,加上高精度即可AC。(朴素个屁啊)(这是官方说的)

括号匹配+快速幂+高精度就可以搞死人。。。(这是我说的)

"2("出现,那么我们就可以开始递归,否则直接答案+2

判断括号,是左括号就h++,右括号就h--。括号为0则退出。

指数没爆int,所以我们可以直接算指数。

AC Code

(代码是这位队友写的,出bug可以对我说,但请不要怪我)

 

#include
using namespace std;
#define ll long long
char a[20010];
ll sum;
int ans[205],anslen;
void gaojin(int b[],int len)
{
	anslen=max(anslen,len);
	for(int i=1;i<=anslen;++i)
	{
		ans[i]+=b[i];
		ans[i+1]+=ans[i]/10;
		ans[i]%=10;
	}
	while(ans[anslen+1]) ++anslen;
}//高精度
int b[1005];
void ksm(ll c)
{
	memset(b,0,sizeof(b));
	b[1]=1;
	int k=1;
	for(int i=1;i<=c;++i)
	{
		int x=0;
		for(int j=1;j<=k;++j)
		{
			b[j]=b[j]*2+x;
			x=b[j]/10;
			b[j]%=10;
			if(x&&j==k) ++k;
		}
	}
	gaojin(b,k);
}//快速幂+高精度(针对底数)
ll ksm1(ll b,ll c) 
{
	ll d=1;
	while(c>0) 
	{
		if(c&1)d*=b;
		c>>=1;
		b*=b;
	}
	return d;
}//快速幂(针对指数)
int p,k;
ll dg(ll x,ll h)
{
	ll q=0;p=0;
	for(int i=x;i=1;i--)printf("%d",ans[i]);
}

 

你可能感兴趣的:(2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation)