Source Code
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define FAST ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define INF INT_MAX
#define ff first
#define ss second
#define all(v) v.begin(),v.end()
#define nl "\n"
using namespace std;
const ll MOD  = 1e9+7;
const int mxN = 2e5+1;
ll n ;
ll p[mxN] , q[mxN];
ll woRepwoOrd(ll n , ll m){
    if(m == 0 )return 1;
    ll ans = 1;
    for(ll i = n ; i>max(n-m , m) ;i--){
        ans = ((ans%MOD)*(i%MOD))%MOD;
    }
    ll k = 1 ;
    for(ll i= min(n-m , m); i>1;i--){
        k = ((k%MOD)*(i%MOD))%MOD;
    }
    ans/=k;
    return ans ;
}
int main()
{
    FAST
    //==================
    ll t = 1 ;
    //cin >> t;
    while(t--){
        cin >> n ;
        for(int i =1;i<=n;i++)cin >> p[i];
        for(int i =1;i<=n;i++)cin >> q[i];
        map<ll,int> m;
        bool is = 1;
        for(int i=1 ;i<=n;i++){
            ll k= ((q[i] - p[i])%i);
            if(k!=0){
                is =0;
                break;
            }else{
                ll k2 = (q[i] - p[i])/i+1;
                m[k2]++;
            }
        }
        ll ans =1 ;
        if(!is)ans=0;
        ll finished =0 ;
        int i =0 ;
        while(finished!=n){
            finished+= m[i];
            if(finished == n)break;
            ll k = n - finished;
            ans = ((ans%MOD) * (k%MOD))%MOD ;
            i++;
        }
        cout << ans + n << nl;



    }

}
Copy
N-dimensions Imam Droubi
GNU G++17
1554 ms
262.1 MB
Memory Limit Exceeded