Source Code
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;
typedef long long ll;
#define Ma7moud_7amdy                 \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL);                    \
    cout.tie(NULL);
#define endl "\n"

void openSesame() {
#ifndef ONLINE_JUDGE
	freopen("standard.in", "r", stdin);
	freopen("standard.out", "w", stdout);
#else
	//freopen("eliminating.in", "r", stdin);
	//freopen("standard.out", "w", stdout);
#endif
}
const int N = 2472171 + 5;
const int mod = 1e9 + 7;
ll fastPower(ll x, ll y) {
	if (y == 0)return 1;
	if (y == 1)return x;
	ll ret = fastPower(x, y >> 1) % mod;
	ret *= ret;
	ret %= mod;
	if (y & 1)ret *= x;
	return ret % mod;
}
ll fact[N];
ll modInv[N];
void solve() {
	int n;
	cin >> n;
	vector<int>p(n + 1), q(n + 1);

	for (int i = 1; i <= n; ++i) {
		cin >> p[i];
	}
	ll sum = 0;
	int cnt = 0;
	bool ok = 1;
	for (int i = 1; i <= n; ++i) {
		cin >> q[i];
		if (q[i] < p[i] || (q[i] - p[i]) % i) {
			ok = 0;
		}
		if (q[i] == p[i])continue;
		sum += (q[i] - p[i]) / i;
	}
	if (!ok) {
		cout << 0 << endl;
		return;
	}
	ll ans = fact[sum];
	for (int i = 1; i <= n; ++i) {
		if (q[i] == p[i])continue;
		int cur = (q[i] - p[i]) / i;
		ans *= modInv[cur];
		ans %= mod;
		if (ans == 0) {
			cout << cur << endl;
			return;
		}
	}

	cout << ans << endl;

}

int main() {
	Ma7moud_7amdy;
	openSesame();
	int t = 1, id = 1;
	//cin >> t;
	fact[0] = fact[1] = 1;
	for (int i = 2; i < N; ++i) {
		fact[i] = fact[i - 1] * i;
		fact[i] %= mod;
	}
	for (int i = 1; i < N; ++i) {
		modInv[i] = fastPower(fact[i], mod - 2);
	}
	while (t--) {
		//cout << "Case #" << id++ << ": ";
		solve();
	}

}
Copy
N-dimensions Ma7moud.7amdy
GNU G++17
883 ms
40.6 MB
Accepted