其他分享
首页 > 其他分享> > 【SSL】2125可可解密钥

【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;
}

标签:可可,庄园,2125,摩尔,long,len,SSL,密钥,牵手
来源: https://blog.csdn.net/weixin_46975572/article/details/111396947