【SSL】2125可可解密钥

【SSL】2125可可解密钥

Time Limit:1000MS
Memory Limit:65536K

Description

摩尔庄园里所有的快乐都由小摩尔们一起创造,一起分享,除了庄园入口,摩尔庄园的围墙也是由小摩尔志愿者重兵把守。
在这里插入图片描述

这些志愿者在执勤的时候是不能说话,但是相邻小摩尔们可以手牵手进行无声交流。为了保证执勤的秩序,规定不允许4个或更多的人联系在一起。
  守卫庄园的小摩尔们每天数量不一。现在可可要回答出他们有多少种牵手方式,才能在他们的注目礼中,昂首挺胸步入摩尔庄园。
例如,总共有4个人,那么可以有以下7种方式:
1,1,1,1
1,2,1
1,1,2
2,1,1
2,2
1,3
3,1
  你能不能帮助可可解决这个问题呢?

Input

共一行。一个1~10000的正整数n,表示共有n个小摩尔。

Output

共一行。输出一个正整数表示n个小摩尔牵手的方式数目。

Sample Input

4

Sample Output

思路

设f[i]表示i个小摩尔牵手的方式数目。
f[i]=f[i-3]+f[i-2]+f[i-1]。
f[1]=1;
f[2]=2
f[3]=4;
4<=i<=n;
要高精加。

代码

#include<iostream>
#include<cstdio>
using namespace std;
long long n,len[3];
short f[3][10010];
void add(int x)//高精加
{
	long long i,lenth=max(len[0],max(len[1],len[2]));
	for(i=0;i<=lenth;i++)
	{
		f[x][i]+=f[(x+1)%3][i]+f[(x+2)%3][i];
		f[x][i+1]+=f[x][i]/10;
		f[x][i]=f[x][i]%10;
	}
	if(f[x][i]>0)
		len[x]=i;
	else
		len[x]=lenth;
	return;
}
void output()
{
	long long i,x=n%3;
	for(i=len[x];i>=0;i--)//输出
		printf("%d",f[x][i]);
	return;
}
int main()
{
	long long i;
	scanf("%lld",&n);
	f[1][0]=1;
	f[2][0]=2;
	f[0][0]=4;
	len[0]=len[1]=len[2]=0;
	for(i=4;i<=n;i++)
		add(i%3);
	output();
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值