nyoj 114某种序列《乘,加》

某种序列
时间限制: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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值