60WA 求调,一关
查看原帖
60WA 求调,一关
511520
drmr楼主2024/5/17 10:21

Record

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int Mod = 1e9 + 7;
int a, b, c, d, e, f, g, h;
string n, m;

int calMod(string x){
	int res = 0, pw = 1;
	for(int i = x.size() - 1; i >= 0; i--){
		res = res + pw * (x[i] - '0') % Mod;
		res %= Mod;
		pw = pw * 10ll % Mod;
	}
	return res;
}
int qpow(int x, int y){
	int res = 1ll;
	while(y){
		if(y & 1) res = res * x % Mod;
		x = x * x % Mod;
		y = y >> 1ll;
	}
	return res;
} 

signed main(){
//	freopen("matrix.in", "r", stdin);
//	freopen("matrix.out", "w", stdout);
	cin >> n >> m;
	cin >> a >> b >> c >> d;
	int e = qpow(a, (calMod(m) - 1 + Mod) % Mod) % Mod;
	int f = (qpow(a, (calMod(m) - 1 + Mod) % Mod) - 1 + Mod) % Mod;
	f = f * b % Mod * qpow(a - 1, Mod - 2) % Mod;
	if(a == 1) f = (calMod(m) - 1 + Mod) % Mod * b % Mod;
	e *= c, f *= c;
	e %= Mod, f %= Mod;
	f += d; f %= Mod;
	int g = qpow(e, (calMod(n) - 1 + Mod) % Mod) % Mod;
	int h = (qpow(e, (calMod(n) - 1 + Mod) % Mod) - 1 + Mod) % Mod;
	h = h * f % Mod * qpow(e - 1, Mod - 2) % Mod;
	if(e == 1) h = (calMod(n) - 1 + Mod) % Mod * f % Mod;
	
	int resa = qpow(a, (calMod(m) - 1 + Mod) % Mod) % Mod * (g + h) % Mod;
	int resb = (qpow(a, (calMod(m) - 1 + Mod) % Mod) - 1 + Mod) % Mod;
	resb = resb * b % Mod * qpow(a - 1, Mod - 2) % Mod;
	if(a == 1) resb = (calMod(m) - 1 + Mod) % Mod * b % Mod;
	cout << (resa + resb) % Mod << endl;
	return 0;
}
2024/5/17 10:21
加载中...