Description
Viky最近对数列有很大的兴趣,比如斐波那契数列。但研究斐波那契数列的人太多了,Viky决定用递推公式定义一种新的数列,并命名为Viky数列。Viky数列定义如下:
V(1) = X, V(2) = Y;
V(n) = A * V(n-2) + B * V(n-1), n≥3;
问:给出整数m,问Viky数列的前m项和sum。
V(1) = X, V(2) = Y;
V(n) = A * V(n-2) + B * V(n-1), n≥3;
问:给出整数m,问Viky数列的前m项和sum。
Input
第1行:测试数据组数t;
接下来依次是这t组数据,对于每一组数据:
第1行:X Y A B,有X,Y,A,B≥0;
第2行:m, m≥0。
接下来依次是这t组数据,对于每一组数据:
第1行:X Y A B,有X,Y,A,B≥0;
第2行:m, m≥0。
Output
一共t行,第i行对于第i组数据的答案。
Sample Input
Original | Transformed |
1 1 2 1 1 6
Sample Output
Original | Transformed |
32
Hint
所给数据及最后的结果sum均为整数,且保证取值范围都在区间[0,2
31)内。
第六届网络赛C题
/***********************************************************************************************************************
题意:略
思路:非常坑的一题... 题目不难 数据太坑..比赛时玩了1个半小时泥巴233333
可以用矩阵做(我没学= =不明白...)
比较好想的就是和斐波那契数列差不多 递推 然后求和 这都没问题
要考虑2种特殊情况...
首先 a,b都是0 则除了开头两个xy以外 其他都是0 如果此时不制止的话 2^30的数据 没有数组能开的下..一直RERERE
然后 x,y都是0的时候同理...这地方太坑了
写这题的时候我就无限RE...
不要担心如果不为0的时候2^30也RE...因为这个数列最小的情况就是斐波那契数列 而斐波那契数列到50的时候就已经非常大了..
所以这题其他几个数据非常小 Victoria说出数据的时候都是%3 ..数据都是小与3的..
***********************************************************************************************************************/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <ctime>
using namespace std;
int v[1111111];
int main()
{
//freopen("data.in" , "r" , stdin);
int t; scanf("%d" , &t);
while(t--){
int x , y , a , b; scanf("%d%d%d%d" , &x , &y , &a , &b);
int m; scanf("%d" , &m);
if(m == 0){
printf("0\n");
continue;
}
if(m == 1){
printf("%d\n" , x);
continue;
}
if(m == 2){
printf("%d\n" , x + y);
continue;
}
if(!a && !b){
printf("%d\n" , x + y);
continue;
}
if(!x && !y){
printf("0\n");
continue;
}
v[1] = x;
v[2] = y;
int sum = x + y;
for(int i = 3 ; i <= m ; i ++){
v[i] = a * v[i - 2] + b * v[i - 1];
sum += v[i];
}
printf("%d\n" , sum);
}
return 0;
}