답안 #556568

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
556568 2022-05-03T11:06:15 Z InternetPerson10 Boat (APIO16_boat) C++17
36 / 100
2000 ms 6316 KB
#include <bits/stdc++.h>
typedef long long ll;

using namespace std;

const ll MOD = 1e9 + 7;

ll modpow(ll n, ll e) {
    if(e == 0) return 1;
    ll x = modpow(n, e/2);
    x *= x; x %= MOD;
    if(e%2) {
        x *= n;
        x %= MOD;
    }
    return x;
}

ll modinv(ll n) {
    return modpow(n, MOD - 2);
}

ll fact[5001];
ll invfact[5001];

ll binom(ll n, ll k) { // Assumes k is quite small
    if(k > n) return 0;
    if(k == n) return 1;
    ll ans = 1;
    if(n-k <= 5000) {
        ans = fact[n];
        ans *= invfact[n-k];
        ans %= MOD;
    }
    else {
        for(ll i = n-k+1; i <= n; i++) {
            ans *= i;
            ans %= MOD;
        }
    }
    ans *= invfact[k];
    ans %= MOD;
    return ans;
}

void precalc() {
    fact[0] = 1;
    for(int i = 1; i <= 5000; i++) {
        fact[i] = (fact[i-1] * i) % MOD;
    }
    for(int i = 0; i <= 5000; i++) {
        invfact[i] = modinv(fact[i]);
    }
}

ll ans[501][1001], pref[501][1001];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    precalc();
    int n;
    cin >> n;
    vector<int> nums(2 * n), a(n+1), b(n+1);
    for(int i = 1; i <= n; i++) {
        cin >> a[i] >> b[i];
        b[i]++;
        nums[2*i - 2] = a[i];
        nums[2*i - 1] = b[i];
    }
    sort(nums.begin(), nums.end());
    nums.resize(unique(nums.begin(), nums.end()) - nums.begin());
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j < nums.size(); j++) {
            if(!(a[i] <= nums[j-1] && nums[j] <= b[i])) {
                continue;
            }
            ll siz = nums[j] - nums[j-1];
            ans[i][j] = siz;
            ans[i][j] += siz * pref[i-1][j-1];
            ans[i][j] %= MOD;
            int g = 1;
            for(int k = i-1; k > 0; k--) {
                if(a[k] <= nums[j-1] && nums[j] <= b[k]) {
                    g++;
                    for(int l = 2; l <= g; l++) {
                        ans[i][j] += ((binom(siz, l) * binom(g-2, l-2)) % MOD) * (1 + pref[k-1][j-1]);
                        ans[i][j] %= MOD;
                    }
                }
            }
        }
        for(int j = 1; j < nums.size(); j++) {
            pref[i][j] = ans[i][j] + pref[i][j-1] + pref[i-1][j] - pref[i-1][j-1];
            pref[i][j] += MOD;
            pref[i][j] %= MOD;
        }
    }
    cout << pref[n][nums.size()-1] << endl;
}

Compilation message

boat.cpp: In function 'int main()':
boat.cpp:74:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |         for(int j = 1; j < nums.size(); j++) {
      |                        ~~^~~~~~~~~~~~~
boat.cpp:93:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |         for(int j = 1; j < nums.size(); j++) {
      |                        ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6100 KB Output is correct
2 Correct 9 ms 6228 KB Output is correct
3 Correct 9 ms 6228 KB Output is correct
4 Correct 10 ms 6164 KB Output is correct
5 Correct 9 ms 6228 KB Output is correct
6 Correct 11 ms 6296 KB Output is correct
7 Correct 9 ms 6228 KB Output is correct
8 Correct 9 ms 6228 KB Output is correct
9 Correct 9 ms 6232 KB Output is correct
10 Correct 9 ms 6228 KB Output is correct
11 Correct 9 ms 6316 KB Output is correct
12 Correct 11 ms 6216 KB Output is correct
13 Correct 10 ms 6296 KB Output is correct
14 Correct 9 ms 6228 KB Output is correct
15 Correct 11 ms 6232 KB Output is correct
16 Correct 6 ms 5076 KB Output is correct
17 Correct 5 ms 5076 KB Output is correct
18 Correct 6 ms 5044 KB Output is correct
19 Correct 5 ms 5076 KB Output is correct
20 Correct 7 ms 5124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6100 KB Output is correct
2 Correct 9 ms 6228 KB Output is correct
3 Correct 9 ms 6228 KB Output is correct
4 Correct 10 ms 6164 KB Output is correct
5 Correct 9 ms 6228 KB Output is correct
6 Correct 11 ms 6296 KB Output is correct
7 Correct 9 ms 6228 KB Output is correct
8 Correct 9 ms 6228 KB Output is correct
9 Correct 9 ms 6232 KB Output is correct
10 Correct 9 ms 6228 KB Output is correct
11 Correct 9 ms 6316 KB Output is correct
12 Correct 11 ms 6216 KB Output is correct
13 Correct 10 ms 6296 KB Output is correct
14 Correct 9 ms 6228 KB Output is correct
15 Correct 11 ms 6232 KB Output is correct
16 Correct 6 ms 5076 KB Output is correct
17 Correct 5 ms 5076 KB Output is correct
18 Correct 6 ms 5044 KB Output is correct
19 Correct 5 ms 5076 KB Output is correct
20 Correct 7 ms 5124 KB Output is correct
21 Execution timed out 2073 ms 4328 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 122 ms 1356 KB Output is correct
2 Correct 58 ms 1312 KB Output is correct
3 Correct 100 ms 1320 KB Output is correct
4 Correct 113 ms 1368 KB Output is correct
5 Correct 151 ms 1308 KB Output is correct
6 Correct 806 ms 1544 KB Output is correct
7 Correct 833 ms 1432 KB Output is correct
8 Correct 847 ms 1488 KB Output is correct
9 Correct 803 ms 1356 KB Output is correct
10 Correct 805 ms 1408 KB Output is correct
11 Correct 168 ms 1360 KB Output is correct
12 Correct 67 ms 1388 KB Output is correct
13 Correct 111 ms 1312 KB Output is correct
14 Correct 107 ms 1404 KB Output is correct
15 Correct 152 ms 1356 KB Output is correct
16 Correct 77 ms 1304 KB Output is correct
17 Correct 49 ms 1264 KB Output is correct
18 Correct 60 ms 1252 KB Output is correct
19 Correct 49 ms 1252 KB Output is correct
20 Correct 75 ms 1296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6100 KB Output is correct
2 Correct 9 ms 6228 KB Output is correct
3 Correct 9 ms 6228 KB Output is correct
4 Correct 10 ms 6164 KB Output is correct
5 Correct 9 ms 6228 KB Output is correct
6 Correct 11 ms 6296 KB Output is correct
7 Correct 9 ms 6228 KB Output is correct
8 Correct 9 ms 6228 KB Output is correct
9 Correct 9 ms 6232 KB Output is correct
10 Correct 9 ms 6228 KB Output is correct
11 Correct 9 ms 6316 KB Output is correct
12 Correct 11 ms 6216 KB Output is correct
13 Correct 10 ms 6296 KB Output is correct
14 Correct 9 ms 6228 KB Output is correct
15 Correct 11 ms 6232 KB Output is correct
16 Correct 6 ms 5076 KB Output is correct
17 Correct 5 ms 5076 KB Output is correct
18 Correct 6 ms 5044 KB Output is correct
19 Correct 5 ms 5076 KB Output is correct
20 Correct 7 ms 5124 KB Output is correct
21 Execution timed out 2073 ms 4328 KB Time limit exceeded
22 Halted 0 ms 0 KB -