POJ 3047 Fibonacci
DEBUG很辛苦,且行, 且珍惜
原代码:
ans[0][0] = (ans[0][0] * a[flag][0][0] + ans[0][1] * a[flag][1][0]) % 10000;
ans[0][1] = (ans[0][0] * a[flag][0][1] + ans[0][1] * a[flag][1][1]) % 10000;
ans[1][0] = (ans[1][0] * a[flag][0][0] + ans[1][1] * a[flag][1][0]) % 10000;
ans[1][1] = (ans[1][0] * a[flag][0][1] + ans[1][1] * a[flag][1][1]) % 10000;
问题在于:修改后ans[][]的值再次调用,就不是原来的值了,会导致程序出错
QAQ
改进后:
ans[0][0] = (temp_1 * a[flag][0][0] + temp_2 * a[flag][1][0]) % 10000;
ans[0][1] = (temp_1 * a[flag][0][1] + temp_2 * a[flag][1][1]) % 10000;
ans[1][0] = (temp_3 * a[flag][0][0] + temp_4 * a[flag][1][0]) % 10000;
ans[1][1] = (temp_3 * a[flag][0][1] + temp_4 * a[flag][1][1]) % 10000;
算法思路:利用快速幂,实现大数范围的快速计算,不会超时
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm> using namespace std;
const int INF = 0x3f3f3f3f; int a[][][];
void test_print(){
for(int i = ; i < ; ++i){
printf("i = %d\n",i);
printf("%d\n\n",a[i][][]);
}
}
int main(){
int i, j, k;
int n;
a[][][] = ;
a[][][] = ;
a[][][] = ;
a[][][] = ;// n = 1 for(i = ; i < ; ++i){
a[i][][] = (a[i-][][] * a[i-][][] + a[i-][][] * a[i-][][]) % ;
a[i][][] = (a[i-][][] * a[i-][][] + a[i-][][] * a[i-][][]) % ;
a[i][][] = (a[i-][][] * a[i-][][] + a[i-][][] * a[i-][][]) % ;
a[i][][] = (a[i-][][] * a[i-][][] + a[i-][][] * a[i-][][]) % ;
}
// test_print();
while(EOF != scanf("%d",&n)){
if(- == n) break;
else if( == n){
printf("0\n");
continue;
}
int count = ;
int flag;
int ans[][];
int array[];
int flag_t = ;
bool init_ok = false;
memset(array, , sizeof(array));
while(n){
if(n % == ){
n /= ;
array[flag_t] = ;
} else{
n = (n - ) / ;
array[flag_t] = ;
}
++flag_t;
}
//for(i = 0; i < flag_t / 2; ++i) swap(array[i], array[flag_t - i -1 ]);
for(i = ; i < flag_t; ++i){
if(!array[i]) continue;
int flag = i;
if(!init_ok){
ans[][] = a[i][][];
ans[][] = a[i][][];
ans[][] = a[i][][];
ans[][] = a[i][][];
init_ok = true;
continue;
}
int temp_1 = ans[][];
int temp_2 = ans[][];
int temp_3 = ans[][];
int temp_4 = ans[][];
ans[][] = (temp_1 * a[flag][][] + temp_2 * a[flag][][]) % ;
ans[][] = (temp_1 * a[flag][][] + temp_2 * a[flag][][]) % ;
ans[][] = (temp_3 * a[flag][][] + temp_4 * a[flag][][]) % ;
ans[][] = (temp_3 * a[flag][][] + temp_4 * a[flag][][]) % ;
}
printf("%d\n",ans[][]);
}
return ;
}
POJ 3047 Fibonacci的更多相关文章
- 矩阵快速幂 POJ 3070 Fibonacci
题目传送门 /* 矩阵快速幂:求第n项的Fibonacci数,转置矩阵都给出,套个模板就可以了.效率很高啊 */ #include <cstdio> #include <algori ...
- POJ 3047 Bovine Birthday 日期定周求 泽勒公式
标题来源:POJ 3047 Bovine Birthday 意甲冠军:.. . 思考:式 适合于1582年(中国明朝万历十年)10月15日之后的情形 公式 w = y + y/4 + c/4 - 2* ...
- POJ 3070 Fibonacci
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- 矩阵经典题目六:poj 3070 Fibonacci
http://poj.org/problem?id=3070 按已构造好的矩阵,那么该矩阵的n次方的右上角的数便是f[n]. #include <stdio.h> #include < ...
- POJ 3070 Fibonacci(矩阵高速功率)
职务地址:POJ 3070 用这个题学会了用矩阵高速幂来高速求斐波那契数. 依据上个公式可知,第1行第2列和第2行第1列的数都是第n个斐波那契数.所以构造矩阵.求高速幂就可以. 代码例如以下: #in ...
- poj 3070 Fibonacci (矩阵快速幂乘/模板)
题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...
- poj 3070 Fibonacci 矩阵快速幂
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- POJ 3070 Fibonacci 【矩阵快速幂】
<题目链接> Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 ...
- poj 3070 Fibonacci 矩阵相乘
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7715 Accepted: 5474 Descrip ...
随机推荐
- Bootstrap dropdown 使用
同样是2种方式 参考http://www.bootcss.com/javascript.html#dropdowns JS方式调用 http://www.w3resource.com/twitter- ...
- Python单元测试:unittest使用简介
一.概述 本文介绍python的单元测试框架unittest,这是Python自带的标准模块unittest.unittest是基于java中的流行单元测试框架junit设计的,其功能强大且灵活,对于 ...
- hdu 4119 Isabella's Message
Isabella's Message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- opencv中遇到的的一些错误
一:错误提示:OpenCV Error:Bad argument<src and dst have different formats> in unkown function,file.. ...
- Shortest Prefixes(trie树唯一标识)
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15948 Accepted: 688 ...
- zend framework多模块配置
上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资 ...
- TextBox控件只允许输入出生日期,并验证年龄不得小于18岁
1.Body tag <form id="form1" runat="server"> <div> <asp:Label ID=& ...
- Oracle存储包存储及案例
Package左侧文件: create or replace package S02_ZFRZPT_YS_MID is procedure start_cal(strgranularity in va ...
- HNOI2016 网络
题目 朴素算法 在线. 树链剖分套一个堆. 时间复杂度\(O(n (\log n)^3)\). 分治 朴素算法中,套一个堆是为了支持删除操作. 采用以下分治可以避免删除操作: 每次对时间\([l,r] ...
- ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3