您的位置:首页 > 其它

nyoj 114某种序列《乘,加》

2016-04-06 23:00 357 查看
某种序列

时间限制: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: