Educational Codeforces Round 13——D. Iterated Linear Function(矩阵快速幂或普通快速幂水题)

原创 2016年06月16日 22:18:20

D. Iterated Linear Function
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Consider a linear function f(x) = Ax + B. Let's define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x)) for n > 0. For the given integer values ABn and x find the value of g(n)(x) modulo 109 + 7.

Input

The only line contains four integers ABn and x (1 ≤ A, B, x ≤ 109, 1 ≤ n ≤ 1018) — the parameters from the problem statement.

Note that the given value n can be too large, so you should use 64-bit integer type to store it. In C++ you can use thelong long integer type and in Java you can use long integer type.

Output

Print the only integer s — the value g(n)(x) modulo 109 + 7.

Examples
input
3 4 1 1
output
7
input
3 4 2 1
output
25
input
3 4 3 1
output
79


裸题一道。最近玩SPFA有点过头……矩阵快速幂做了有一段时间了,构造矩阵还想了几分钟,我也是醉了……。好像也可以用普通快速幂,把r=r*bas%mod改成r=(r*bas+b)%mod即可,一开始全部设为int各种苦逼WA……千万记得最后输出的答案再模mod,这里又苦逼WA一发……

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
#define MMINF(x) memset(x,INF,sizeof(x))
using namespace std;
typedef long long LL;
struct mat
{
	LL pos[2][2];
	mat(){MM(pos);}
};
LL a,b,n,x;
const int mod=1e9+7;
inline mat operator*(const mat &a,const mat &b)
{
	mat c;
	for (int i=0; i<2; i++)
	{
		for (int j=0; j<2; j++)
		{
			for (int k=0; k<2; k++)
			{
				c.pos[i][j]+=(a.pos[i][k]*b.pos[k][j])%mod;
			}
		}
	}
	return c;
}
inline mat operator^(mat a,LL b)
{
	mat bas=a,r;
	for (int i=0; i<2; i++)
		r.pos[i][i]=1;
	while (b!=0)
	{
		if(b&1)
			r=r*bas;
		bas=bas*bas;
		b>>=1;
	}
	return r;
}
int main(void)
{
	while (cin>>a>>b>>n>>x)
	{
		mat one,t;
		one.pos[0][0]=x;
		one.pos[1][0]=1;
		t.pos[0][0]=a;
		t.pos[0][1]=b;
		t.pos[1][1]=1;
		t=t^(n);
		one=t*one;
		cout<<one.pos[0][0]%mod<<endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Codeforces 678 D. Iterated Linear Function(构造矩阵)

传送门 D. Iterated Linear Function time limit per test1 second memory limit per test256 megabytes i...

Codeforces Round #307 (Div. 2) 551D - GukiZ and Binary Operations 矩阵快速幂

题意:给一个大小为n的数组,使相邻的数进行&运算得到n-1对数,把这n-1对数进行 | 运算等于k。有多少个这样的数组,答案mod m 思路:毫无思路… 因为之前不会矩阵快速幂,早就想学来着,就顺便...

Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo(矩阵快速幂)

题意:主角可以从 (0, 0)走到(x + 1, y + 1), (x + 1, y), 或者 (x + 1, y - 1)。有k个区间完全覆盖0到k,每个区间有一个值c[i],当x在一个区间内时...

Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks(dp + 矩阵快速幂)

题意: 给定b≤109块数字,每块有n≤105个数字,现在从每块选一个拼出一个大数给定b\le 10^9块数字, 每块有n\le10^5个数字, 现在从每块选一个拼出一个大数 求这个大数MO...
  • lwt36
  • lwt36
  • 2016年02月01日 15:19
  • 362

Codeforces Round #291 (Div. 2) E - Darth Vader and Tree (DP+矩阵快速幂)

这题想了好长时间,果断没思路。。于是搜了一下题解。一看题解上的”快速幂”这俩字,不对。。这仨字。。犹如醍醐灌顶啊。。。因为x的范围是10^9,所以当时想的时候果断把dp递推这一方法抛弃了。我怎么就没想...

Codeforces Round #257(Div. 2) B. Jzzhu and Sequences(矩阵快速幂)

Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences(矩阵快速幂)

Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo dp+矩阵快速幂

题意:从(0,0)走到(k,0)(1 ≤ k ≤ 1018),每次可以从(x, y) 走到 (x+1, y+1) 或 (x+1, y) 或 (x+1, y-1),然后必须在很多个y == ci的线段下...

Codeforces Round #362 (Div. 2) F. Legen... (AC自动机 + 矩阵快速幂)

题意:有很多模式串每个都有自己的价值,然后求长度为ll的原串,让所有它的子串价值最大。分析:首先想到最直接的我们肯定要建立一个trie图来形容这个自动机,这个trie图是一个有向图,每一个节点代表一个...

CodeForces - 678D - Iterated Linear Function

题目描述: Consider a linear function f(x) = Ax + B. Let’s define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x...

Codeforces - 551D. GukiZ and Binary Operations - 数学+矩阵快速幂

GukiZ and Binary Operations 题目链接 分类:matrices combinatorics math number theory 1.题意概述 给你一个长度为n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Educational Codeforces Round 13——D. Iterated Linear Function(矩阵快速幂或普通快速幂水题)
举报原因:
原因补充:

(最多只允许输入30个字)