加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数 Astar-Round1 Problem B

发布时间:2021-03-13 21:12:41 所属栏目:大数据 来源:网络整理
导读:标题 2016"百度之星" - 资格赛(Astar Round1) http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=690pid=1002 Problem Description 度熊眼前有一个满是由1组成的字符串,被称为全1序列。你可以归并恣意相邻的两个1,从而形成一个新的序列

标题

2016"百度之星" - 资格赛(Astar Round1)

http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=690&pid=1002

Problem Description

度熊眼前有一个满是由1组成的字符串,被称为全1序列。你可以归并恣意相邻的两个1,从而形成一个新的序列。对付给定的一个全1序列,请计较按照以上要领,可以组成几多种差异的序列。

Input
这里包罗多组测试数据,每组测试数据包括一个正整数N,代表全1序列的长度。
1≤N≤200

Output
对付每组测试数据,输出一个整数,代表由标题中所给定的全1序列所能形成的新序列的数目。

Sample Input
1
3
5
Sample Output
1
3
8

Hint

假如序列是:(111)。可以结构出如下三个新序列:(111),(21),(12)。


说明

n-i个位置中安排i个2。要计较组合,因为N较大,最后功效远超long long能存储范畴,以是涉及大数加法、乘法、除法。

(这个代码运行时刻相对较长,不是很有参考性)

(角逐还没竣事,但这篇文章能被搜刮引擎收录时应该竣事了吧)

代码

#include <iostream>
using namespace std;
const int SZ=50;

int ans[SZ];
int c[SZ];

void mul(int a[],int m)
{
	for(int i=0;i<SZ-2;i++){
		a[i]*=m;
	}
	for(int i=1;i<SZ-2;i++){
		a[i]+=a[i-1]/10;
		a[i-1]%=10;
	}
}

void div(int a[],int m)
{
	int i,c;
	for(i=SZ-2,c=0;i>=0;i--){
		c=c*10+a[i];
		a[i]=c/m;
		c%=m;
	}
}

void add(int a[],const int b[])
{
	int i;
	for(i=0;i<SZ-2;i++){
		a[i]+=b[i];
		a[i+1]+=a[i]/10;
		a[i]%=10;
	}
	if(a[SZ-1])
		cout<<"spill"<<endl;
}

void zero(int a[])
{
	for(int i=0;i<SZ;i++)
		a[i]=0;
}

void print(int a[])
{
	int i,j;
	for(i=SZ-1;i>=0;i--)
		if(a[i])
			break;
	for(j=i;j>=0;j--)
		cout<<a[j];
	cout<<endl;
}

int main()
{
	int i,j;
	int n;
	while(cin>>n){
		zero(ans);
		ans[0]=1;
		for(i=1;2*i<=n;i++){
			zero(c);
			c[0]=1;
			for(j=1;j<=min(i,n-2*i);j++){
				mul(c,n-i-j+1);
				div(c,j);
			}
			add(ans,c);
		}
		print(ans);
	}
	return 0;
}

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读