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 678D Iterated Linear Function 矩阵快速幂

CodeForces 678D Iterated Linear Function 矩阵快速幂 题目链接:CodeForces 678D Iterated Linear Function  题意:由递推...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2016年07月19日 11:48
  • 701

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

传送门 D. Iterated Linear Function time limit per test1 second memory limit per test256 megabytes i...
  • qingshui23
  • qingshui23
  • 2016年06月26日 11:40
  • 1969

Educational Codeforces Round 36 题解

总结 第一次打cf的edu round,发现是acm赛制,感觉比平常的cf赛制要好玩一些。这场的题目比较水,当然我没打过其他场不能做比较。然而因为时间不太够所以并没有AK,果然自己跟Claris等神...
  • qq_33229466
  • qq_33229466
  • 2018年01月14日 00:40
  • 275

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)) for ...
  • Ypopstar
  • Ypopstar
  • 2016年09月27日 22:32
  • 333

Educational Codeforces Round 36 (Rated for Div. 2) 题解

先总结一波 第一次打cf,感觉还不错,题目做得挺顺手。虽然开始30min才想起来有这么个比赛来着。。 纪念一下第一次的rank,话说题真是水 这是大概还剩下5min的时候截的,实际可能会...
  • jpwang8
  • jpwang8
  • 2018年01月13日 23:16
  • 242

Educational Codeforces Round 27

A 题意:把2 * n个人分成两组,使得无论两组的人怎么进行比赛 第一组的人始终都要保持全赢,如果两个人能力值相等两人都可以赢 思路:排序后只要保证n + 1个人的能力值大于第n个人的能力值即可 #i...
  • sasuke__
  • sasuke__
  • 2017年08月23日 10:35
  • 199

Educational Codeforces Round 13-D. Iterated Linear Function

原题链接 g(n)(x)  = (A^n*x + (A^(n-1) + A^(n-2) + A^(n-3) + ...A) * B) % 1000000007 这个式子用快速幂,等比数列求和公式,费...
  • qq_26122039
  • qq_26122039
  • 2016年06月14日 16:09
  • 320

【Educational Codeforces Round 33】 D. Credit Card (贪心)

贪心处理。题意:一张信用卡,白天主人可以去银行存钱,随意存多少钱,但必须是正整数,且保证账户金额不超过d,晚上的时候会对信用卡金额做一些变化,如果是a[i]是0则保证此时信用卡金额必须大于等于0。问主...
  • hmc0411
  • hmc0411
  • 2017年11月24日 11:25
  • 663

Educational Codeforces Round 8 总结

A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes ...
  • zyx520ytt
  • zyx520ytt
  • 2016年02月21日 02:47
  • 589

Educational Codeforces Round 13 Iterated Linear Function(数学)

思路:推一下公式可以知道其实就是a^n*x+a^(n-1)*b+a^(n-2)*b+....b,就是一个等比数列求和嘛,注意特判1,可是因为范围太大,所以就要用到模乘法以及逆元。          ...
  • qq_21057881
  • qq_21057881
  • 2016年06月25日 14:44
  • 260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Educational Codeforces Round 13——D. Iterated Linear Function(矩阵快速幂或普通快速幂水题)
举报原因:
原因补充:

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