AOJ662 越来越快

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。

Input
第1行:测试数据组数t;
接下来依次是这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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值