답안 #556566

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
556566 2022-05-03T11:00:15 Z InternetPerson10 Boat (APIO16_boat) C++17
36 / 100
2000 ms 6236 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 smallinv[2001];

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

void precalc() {
    smallinv[0] = 1;
    for(int i = 1; i <= 2000; i++) {
        smallinv[i] = (smallinv[i-1] * i) % MOD;
    }
    for(int i = 0; i <= 2000; i++) {
        smallinv[i] = modinv(smallinv[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:66:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         for(int j = 1; j < nums.size(); j++) {
      |                        ~~^~~~~~~~~~~~~
boat.cpp:85:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         for(int j = 1; j < nums.size(); j++) {
      |                        ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6072 KB Output is correct
2 Correct 9 ms 6128 KB Output is correct
3 Correct 10 ms 6144 KB Output is correct
4 Correct 9 ms 6100 KB Output is correct
5 Correct 9 ms 6176 KB Output is correct
6 Correct 10 ms 6236 KB Output is correct
7 Correct 9 ms 6228 KB Output is correct
8 Correct 10 ms 6156 KB Output is correct
9 Correct 10 ms 6228 KB Output is correct
10 Correct 9 ms 6156 KB Output is correct
11 Correct 10 ms 6228 KB Output is correct
12 Correct 10 ms 6124 KB Output is correct
13 Correct 9 ms 6236 KB Output is correct
14 Correct 9 ms 6228 KB Output is correct
15 Correct 10 ms 6228 KB Output is correct
16 Correct 5 ms 4948 KB Output is correct
17 Correct 5 ms 5076 KB Output is correct
18 Correct 5 ms 4948 KB Output is correct
19 Correct 5 ms 4996 KB Output is correct
20 Correct 5 ms 4948 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6072 KB Output is correct
2 Correct 9 ms 6128 KB Output is correct
3 Correct 10 ms 6144 KB Output is correct
4 Correct 9 ms 6100 KB Output is correct
5 Correct 9 ms 6176 KB Output is correct
6 Correct 10 ms 6236 KB Output is correct
7 Correct 9 ms 6228 KB Output is correct
8 Correct 10 ms 6156 KB Output is correct
9 Correct 10 ms 6228 KB Output is correct
10 Correct 9 ms 6156 KB Output is correct
11 Correct 10 ms 6228 KB Output is correct
12 Correct 10 ms 6124 KB Output is correct
13 Correct 9 ms 6236 KB Output is correct
14 Correct 9 ms 6228 KB Output is correct
15 Correct 10 ms 6228 KB Output is correct
16 Correct 5 ms 4948 KB Output is correct
17 Correct 5 ms 5076 KB Output is correct
18 Correct 5 ms 4948 KB Output is correct
19 Correct 5 ms 4996 KB Output is correct
20 Correct 5 ms 4948 KB Output is correct
21 Execution timed out 2062 ms 2532 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 180 ms 1232 KB Output is correct
2 Correct 89 ms 1348 KB Output is correct
3 Correct 148 ms 1228 KB Output is correct
4 Correct 175 ms 1212 KB Output is correct
5 Correct 222 ms 1248 KB Output is correct
6 Correct 1389 ms 1456 KB Output is correct
7 Correct 1377 ms 1464 KB Output is correct
8 Correct 1371 ms 1488 KB Output is correct
9 Correct 1349 ms 1368 KB Output is correct
10 Correct 1375 ms 1368 KB Output is correct
11 Correct 236 ms 1312 KB Output is correct
12 Correct 95 ms 1240 KB Output is correct
13 Correct 169 ms 1248 KB Output is correct
14 Correct 160 ms 1424 KB Output is correct
15 Correct 237 ms 1228 KB Output is correct
16 Correct 123 ms 1144 KB Output is correct
17 Correct 78 ms 1228 KB Output is correct
18 Correct 96 ms 1384 KB Output is correct
19 Correct 74 ms 1120 KB Output is correct
20 Correct 123 ms 1228 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6072 KB Output is correct
2 Correct 9 ms 6128 KB Output is correct
3 Correct 10 ms 6144 KB Output is correct
4 Correct 9 ms 6100 KB Output is correct
5 Correct 9 ms 6176 KB Output is correct
6 Correct 10 ms 6236 KB Output is correct
7 Correct 9 ms 6228 KB Output is correct
8 Correct 10 ms 6156 KB Output is correct
9 Correct 10 ms 6228 KB Output is correct
10 Correct 9 ms 6156 KB Output is correct
11 Correct 10 ms 6228 KB Output is correct
12 Correct 10 ms 6124 KB Output is correct
13 Correct 9 ms 6236 KB Output is correct
14 Correct 9 ms 6228 KB Output is correct
15 Correct 10 ms 6228 KB Output is correct
16 Correct 5 ms 4948 KB Output is correct
17 Correct 5 ms 5076 KB Output is correct
18 Correct 5 ms 4948 KB Output is correct
19 Correct 5 ms 4996 KB Output is correct
20 Correct 5 ms 4948 KB Output is correct
21 Execution timed out 2062 ms 2532 KB Time limit exceeded
22 Halted 0 ms 0 KB -