Submission #15340237


Source Code Expand

Copy
#include <bits/stdc++.h>
using namespace std;

// Define
using ll = long long;
using ull = unsigned long long;
using ld = long double;
template <class T> using pvector = vector<pair<T, T>>;
template <class T>
using rpriority_queue = priority_queue<T, vector<T>, greater<T>>;
constexpr const ll dx[4] = {1, 0, -1, 0};
constexpr const ll dy[4] = {0, 1, 0, -1};
constexpr const ll MOD = 1e9 + 7;
constexpr const ll mod = 998244353;
constexpr const ll INF = 1LL << 60;
constexpr const ll inf = 1 << 30;
constexpr const char rt = '\n';
constexpr const char sp = ' ';
#define rt(i, n) (i == (ll)(n) -1 ? rt : sp)
#define len(x) ((ll)(x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define eb emplace_back
#define ifn(x) if (not(x))
#define elif else if
#define elifn else ifn
#define fi first
#define se second

template <class T> bool chmax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return 1;
    }
    return 0;
}
template <class T> bool chmin(T &a, const T &b) {
    if (a > b) {
        a = b;
        return 1;
    }
    return 0;
}

// Debug
#define debug(...)                                                             \
    {                                                                          \
        cerr << __LINE__ << ": " << #__VA_ARGS__ << " = ";                     \
        for (auto &&X : {__VA_ARGS__}) cerr << "[" << X << "] ";               \
        cerr << rt;                                                            \
    }

#define dump(a, h, w)                                                          \
    {                                                                          \
        cerr << __LINE__ << ": " << #a << " = [" << rt;                        \
        rep(_i, h) {                                                           \
            rep(_j, w) {                                                       \
                if (abs(a[_i][_j]) >= INF / 2 and a[_i][_j] <= -INF / 2)       \
                    cerr << '-';                                               \
                if (abs(a[_i][_j]) >= INF / 2)                                 \
                    cerr << "∞" << sp;                                         \
                else                                                           \
                    cerr << a[_i][_j] << sp;                                   \
            }                                                                  \
            cerr << rt;                                                        \
        }                                                                      \
        cerr << "]" << rt;                                                     \
    }

#define vdump(a, n)                                                            \
    {                                                                          \
        cerr << __LINE__ << ": " << #a << " = [";                              \
        rep(_i, n) {                                                           \
            if (_i) cerr << sp;                                                \
            if (abs(a[_i]) >= INF / 2 and a[_i] <= -INF / 2) cerr << '-';      \
            if (abs(a[_i]) >= INF / 2)                                         \
                cerr << "∞" << sp;                                             \
            else                                                               \
                cerr << a[_i];                                                 \
        }                                                                      \
        cerr << "]" << rt;                                                     \
    }

// Loop
#define inc(i, a, n) for (ll i = (a), _##i = (n); i <= _##i; ++i)
#define dec(i, a, n) for (ll i = (a), _##i = (n); i >= _##i; --i)
#define rep(i, n) for (ll i = 0, _##i = (n); i < _##i; ++i)
#define each(i, a) for (auto &&i : a)

// Stream
#define fout(n) cout << fixed << setprecision(n)
struct io {
    io() { cin.tie(nullptr), ios::sync_with_stdio(false); }
} io;

// Speed
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

// Math
inline constexpr ll gcd(const ll a, const ll b) {
    return b ? gcd(b, a % b) : a;
}
inline constexpr ll lcm(const ll a, const ll b) { return a / gcd(a, b) * b; }

inline constexpr ll modulo(const ll n, const ll m = MOD) {
    ll k = n % m;
    return k + m * (k < 0);
}
inline constexpr ll chmod(ll &n, const ll m = MOD) {
    n %= m;
    return n += m * (n < 0);
}
inline constexpr ll mpow(ll a, ll n, const ll m = MOD) {
    ll r = 1;
    rep(i, 64) {
        if (n & (1LL << i)) r *= a;
        chmod(r, m);
        a *= a;
        chmod(a, m);
    }
    return r;
}
inline ll inv(const ll n, const ll m = MOD) {
    ll a = n, b = m, x = 1, y = 0;
    while (b) {
        ll t = a / b;
        a -= t * b;
        swap(a, b);
        x -= t * y;
        swap(x, y);
    }
    return modulo(x, m);
}

signed main() {
    ll N, A;
    cin >> N;
    vector<ll> data;
    rep(i, N) cin >> A, data.pb(A * 2);
    rep(i, N) cin >> A, data.pb(A * 2 + 1);
    sort(all(data));
    ll res = 1, t = 0;
    rep(i, 2 * N) {
        //debug(t);
        if (data[i] & 1) {
            if (t <= 0) {
                t--;
                continue;
            }
            res *= t;
            res %= MOD;
            t--;
        } else {
            if (t >= 0) {
                t++;
                continue;
            }
            res *= -t;
            res %= MOD;
            t++;
        }
    }
    cout << res << rt;
}

Submission Info

Submission Time
Task A - 1D Matching
User Shuzaei
Language C++ (GCC 9.2.1)
Score 500
Code Size 5889 Byte
Status
Exec Time 45 ms
Memory 5312 KB

Judge Result

Set Name Score / Max Score Test Cases
Sample 0 / 0 example0.txt, example1.txt
All 500 / 500 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, example0.txt, example1.txt
Case Name Status Exec Time Memory
000.txt 30 ms 4084 KB
001.txt 19 ms 3764 KB
002.txt 24 ms 3812 KB
003.txt 18 ms 4156 KB
004.txt 41 ms 5252 KB
005.txt 44 ms 5136 KB
006.txt 41 ms 5308 KB
007.txt 45 ms 5144 KB
008.txt 41 ms 5312 KB
009.txt 43 ms 5144 KB
010.txt 44 ms 5216 KB
011.txt 43 ms 5264 KB
example0.txt 7 ms 3608 KB
example1.txt 2 ms 3616 KB