记录编号 222864 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOI 2013]矩阵游戏 最终得分 100
用户昵称 GravatarSatoshi 是否通过 通过
代码语言 C++ 运行时间 0.165 s
提交时间 2016-02-05 12:14:47 内存使用 2.22 MiB
显示代码纯文本
#include <fstream>
#define N 1000000
using namespace std;
typedef long long ll;
ifstream in("matrixb.in");
ofstream out("matrixb.out");
ll mod=1e9+7;
ll a,b,c,d,m=0,n=0;
char s1[N+10],s2[N+10];
ll phi;
ll ans=0;
class vector
{
public:
	ll x,y;
	void make(ll aaa,ll bbb)
	{
		x=aaa;
		y=bbb;
	}
}t1,t2,t3;
vector operator *(vector a,vector b)
{
	vector c;
	c.x=(a.x*b.x)%mod;
	c.y=(a.x*b.y+a.y)%mod;
	return c;
}
vector pow(vector o,ll k)
{
	vector c;
	k--;
	c=o;
	while(k)
	{
		if(k&1)c=c*o;
		o=o*o;
		k=k>>1;
	}
	return c;
}
void init(char *s,ll &sum)
{
	int i;
	for(i=0;s[i];i++)
	{
		sum=(sum*10+s[i]-'0')%phi;
	}
}
void read()
{
	in>>s1>>s2>>a>>b>>c>>d;
	if(a==1&&c==1)phi=mod;
	else phi=mod-1;
	init(s1,n);init(s2,m);
	t1.make(a,b);
	t2.make(c,d);
	//out<<n<<' '<<m<<' '<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
}
void work()
{
	
	t1=pow(t1,m-1);
	t3=t2*t1;
	t3=pow(t3,n-1);
	t1=t1*t3;
	ans=(t1.x+t1.y)%mod;
	out<<ans<<endl;
}
int main()
{
	read();
	work();
	return 0;
}