AC+WA+T 30 分。。救救我
查看原帖
AC+WA+T 30 分。。救救我
141335
qwq2519楼主2020/11/14 10:55
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
using namespace std;
const int mod = 1e9 + 7;

inline char gt()
{
	static char buf[1 << 21], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
inline void rs(string &s)
{
	register char ch = gt();
	while(ch >= '1' && ch <= '9') s += ch, ch = gt();
}
template <typename T>
inline void  read(T &x)
{
	register char ch = gt();
	x = 0;
	int w(0);
	while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
	while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
	w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x)
{
	if(x < 0) x = -x, putchar('-');
	char ch[20];
	int num(0);
	while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
	while(num) putchar(ch[num--]);
	putchar('\n');
}

struct matrix
{
	int n, m;
	int c[3][3];
	matrix()
	{
		memset(c, 0, sizeof c);
	}
} A, base;
int a, b, c, d;
matrix operator * (matrix x, matrix y)
{
	matrix c;
	c.n = x.n;
	c.m = y.m;
	rep(i, 1, x.n)
	rep(j, 1, y.n)
	rep(k, 1, x.m)
	c.c[i][j] = (c.c[i][j] + 1ll *  x.c[i][k] * y.c[k][j] % mod) % mod;
	return c;
}
inline matrix qpow (matrix a, int k)
{
	matrix ans;
	ans.n = a.n;
	ans.m = a.m;
	rep(i, 1, a.n) ans.c[i][i] = 1;

	while(k)
		{
			if(k & 1) ans = ans * a;
			a = a * a;
			k >>= 1;
		}
	return ans;
}

int main()
{
	string nn, mm;
	rs(nn);
	rs(mm);
	read(a);
	read(b);
	read(c);
	read(d);
	int n = 0, m = 0;
	int P = mod - 1;
	if(a == 1) P++;
	int lenn = nn.size() - 1, lenm = mm.size() - 1;
	rep(i, 0, lenn)
	n = (n * 10 + (nn[i] - '0') ) % P;
	rep(i, 0, lenm)
	m = (m * 10 + (mm[i] - '0') ) % P;

    base.n=base.m=2;
	A.n = A.m = 2;
	base.c[1][1] = a;
	base.c[2][1] = b;
	base.c[2][2] = 1;
	A = qpow(base, m - 1);

	base.c[1][1] = c;
	base.c[2][1] = d;
	base.c[2][2] = 1;
	base = A * base;
	A = (qpow(base, n - 1) * A);

	matrix chu;
	chu.n = 1;
	chu.m = 2;
	chu.c[1][1] = chu.c[1][2] = 1;
	chu = chu * A;
	out(chu.c[1][1] % mod);
}
2020/11/14 10:55
加载中...