关闭

UVA - 12470 Tribonacci

1387人阅读 评论(0) 收藏 举报
分类:

题目:



这个题目,我主要就是被题目名字吸引,所以才把这个水题做了一下。

看题目名字就知道是3阶斐波那契数列的意思,然后看后面那么多输入输出一下就懂了什么意思。

(事实上我真的没有看正文)

既然是3阶齐次线性递归,那用矩阵快速幂一下就出来了。

代码很简单,直接把我的另外一篇博客稍微改改就出来了。

代码:

#include<iostream>
using namespace std;

int n = 3;
int mod = 1000000009;
long long in[3][3] = { 1, 1, 1, 1, 0, 0, 0, 1, 0 };
long long list[3][3], temp[3][3];

void pro(long long l1[][3], long long l2[][3], long long t[][3])		//t=l1*l2
{
	for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)
	{
		t[i][j] = 0;
		for (int k = 0; k < n; k++)t[i][j] = (t[i][j] + l1[i][k] * l2[k][j]) % mod;
	}
}

void f(long long num)		//让list是in的num次方
{
	if (num == 0)
	{
		for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)list[i][j] = (i == j);
		return;
	}
	f(num / 2);
	pro(list, list, temp);
	if (num % 2)pro(temp, in, list);
	else for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)list[i][j] = temp[i][j];
}

int main()
{
	long long k;
	while (cin >> k)
	{
		if (k == 0)break;
		if (k == 1)cout << 0 << endl;
		else if (k == 2)cout << 1 << endl;
		else
		{
			f(k - 3);
			cout << (list[0][0] * 2 + list[0][1]) % mod << endl;
		}
	}
	return 0;
}

0
0
查看评论

UVA - 12470 Tribonacci 矩阵快速幂

题目大意:fibonacci的升级版,规则是f(n) = f(n-1) + f(n-2) + f(n-3)解题思路:水题#include<cstdio> typedef long long ll; const int N = 3; const ll mod = 1e9 + 9;struc...
  • L123012013048
  • L123012013048
  • 2015-06-01 21:08
  • 814

uva 12470 Tribonacci

点击打开uva12470  思路: 矩阵快速幂 分析: 1 裸题 代码: /************************************************ * By: chenguolin * *...
  • cgl1079743846
  • cgl1079743846
  • 2013-08-30 13:14
  • 1261

JavaScript趣题:Tribonacci数列

下面,我想介绍一下Fibonacci(斐波那契数列)的大兄弟,Tribonacci数列。 正如它的名字所暗示的那样,它和斐波那契数列方式很相像,但又有不同的地方。 如果我们用[1,1,1]开始这个数列,我们将得到如下的结果: [1,1,1,3,5,9,17,31,...] 大家可以看到,第四项3是第...
  • esir82
  • esir82
  • 2016-09-24 09:56
  • 1053

Tribonacci数列前n项和的求解问题

Tribonacci数列前n项和的求解问题
  • baidu_33197061
  • baidu_33197061
  • 2016-04-24 22:58
  • 483

uva 12470(矩阵快速幂)

题意:公式f(n) = f(n - 1) + f(n - 2) + f(n - 3),给出n,f(1) = 0,f(2) = 1, f(3) = 2,要求得出f(n)。 题解:普通的矩阵快速幂模板题。#include <stdio.h> #include <string.h>...
  • u013392752
  • u013392752
  • 2015-06-01 20:33
  • 639

UVa在线测评很慢怎么办?

UVa在线测评很慢怎么办? https://uva.onlinejudge.org/很慢,通常打个来回,十分钟算快。 先在 http://vjudge.net 提交,通常一个来回,一分钟肯定好了, AC后,再到 https://uva.onlinejudge.org/ 进行验证...
  • mrcrack
  • mrcrack
  • 2016-11-14 07:54
  • 1745

名企面试题之泰波那契数列Tribonacci,其定义式为T(n)=T(n-1)+T(n-2)+T(n-3)

import java.util.concurrent.TimeUnit; /** * 泰波那契数列 (Tribonacci Number) 即把斐波那契数列 (Fibonacci Number) 的概念推广至三个数。 * T(0)=1, T(1)=1, T(2)=2, T(n)=T...
  • huoyin
  • huoyin
  • 2010-11-17 23:32
  • 3577

uva oj起步

参加完HW软件训练营,10天培训下来收获了很多。感触最深的是:实践少,错误多。究其原因:自身代码量不足,编的少导致编程时bug不断。来同组科班出身的复旦交大的同学代码能力明显高我n个数量级。       作为学电子半路出家我,压力山大。。。没有过硬的编程能力以后的开发...
  • shuzjd
  • shuzjd
  • 2013-01-21 17:34
  • 3713

uva刷题开始

学习c语言已经有三个月了,注册uva账号已有一段时间,最近基本算是进入了刷题状态,在这三个月的学习过程中,有很多收获,也出现了很多不足。 从最初的hello,world错三遍才过,到现在已经基本具备一点基础的算法能力,能处理部分稍微难一点的题目,中间也算是侥幸参加了一次友谊赛,并作出了其中四道题目...
  • sheng4204
  • sheng4204
  • 2014-12-01 15:15
  • 731

uva 10479(找规律+递归)

题意:有一个初始序列第一个数字是0, 规律是把前一次推出来的每一个数字x,先接x个0,然后接x+1。 0 –> 1 –> 02 –> 1003 –> 02110004 那么这个序列就变成0,1,0,2,1,0,0,3,0,2,1,1,0,0,0,4… 问序列里第n个数...
  • u013392752
  • u013392752
  • 2015-07-12 18:11
  • 731
    个人资料
    • 访问:1075641次
    • 积分:19351
    • 等级:
    • 排名:第536名
    • 原创:787篇
    • 转载:0篇
    • 译文:0篇
    • 评论:114条
    博客专栏