某种序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
输出
对于输入的每一行输出A99的值
样例输入
1 1 1
样例输出
69087442470169316923566147
来源
水题比赛中较不水的
上传者
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
输出
对于输入的每一行输出A99的值
样例输入
1 1 1
样例输出
69087442470169316923566147
来源
水题比赛中较不水的
上传者
hzyqazasdf
一直加竟然会超时,,好像有的人没超时。。。
然后就设A0,A1,A2为A,B,C,找出了A99关于A,B,C的关系,,,,,大数乘法搞定。。。。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long shu[10][100];
int ge[10];
long long he[5][100];
/*
1 1 2
15762679542071167858843489
1 2 3
24332675219681431451788241
1 2 4
28992087708416717612934417
*/
int main()
{
int a,b,c;
int aa[26]={1,5,7,6,2,6,7,9,5,4,2,0,7,1,1,6,7,8,5,8,8,4,3,4,8,9};
int bb[26]={2,4,3,3,2,6,7,5,2,1,9,6,8,1,4,3,1,4,5,1,7,8,8,2,4,1};
int cc[26]={2,8,9,9,2,0,8,7,7,0,8,4,1,6,7,1,7,6,1,2,9,3,4,4,1,7};
for (int i=0;i<26;i++)
{
shu[1][i]=aa[25-i];
shu[2][i]=bb[25-i];
shu[3][i]=cc[25-i];
}
while (~scanf("%d%d%d",&a,&b,&c))
{
if (a==0&&b==0&&c==0)
{
printf("0\n");
continue;
}
ge[1]=ge[2]=ge[3]=26;
memset(he,0,sizeof(he));
for (int i=0;i<ge[1];i++)
{
he[1][i]=a*shu[1][i];
he[2][i]=b*shu[2][i];
he[3][i]=c*shu[3][i];
}
ge[4]=26;
for (int i=0;i<ge[4];i++)
{
if (i<26)
he[4][i]=he[4][i]+he[1][i]+he[2][i]+he[3][i];
if (he[4][i]>9)
{
if (i==ge[4]-1)
ge[4]++;
he[4][i+1]=he[4][i]/10;
he[4][i]=he[4][i]%10;
}
}
for (int i=ge[4]-1;i>=0;i--)
printf("%lld",he[4][i]);
printf("\n");
}
return 0;
}