【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
7
思路
设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