제출 #1220635

#제출 시각아이디문제언어결과실행 시간메모리
1220635obamagamingBoat (APIO16_boat)C++20
100 / 100
607 ms4412 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN = 503; const int MOD = 1e9 + 7; #define int long long int n, l[MAXN], r[MAXN], dp[MAXN][MAXN * 2], inv[MAXN]; vector<int> vt; vector<pair<int, int>> segment; int pw(int a, int b){ int res = 1; while(b){ if (b & 1) res = res * a % MOD; a = a * a % MOD; b >>= 1; } return res; } main(){ //freopen("test.inp", "r", stdin); //freopen("test.out", "w", stdout); cin >> n; for (int i = 1; i <= n; i++){ cin >> l[i] >> r[i]; vt.push_back(l[i]); vt.push_back(r[i] + 1); } sort(vt.begin(), vt.end()); segment.push_back({0, 0}); for (int i = 1; i < vt.size(); i++){ if (vt[i] != vt[i - 1]) segment.push_back({vt[i - 1], vt[i] - 1}); } for (int j = 0; j < segment.size(); j++) dp[0][j] = 1; inv[0] = 1; for (int i = 1; i < MAXN; i++) inv[i] = pw(i, MOD - 2); for (int i = 1; i <= n; i++){ dp[i][0] = 1; for (int j = 1; j < segment.size(); j++){ dp[i][j] = dp[i][j - 1]; auto[a, b] = segment[j]; int cnt = 0, sum = 1; for (int k = i; k >= 1; k--){ if (l[k] <= a && b <= r[k]){ cnt++; sum = (sum * (b - a + cnt) % MOD) * inv[cnt] % MOD; //C(b - a + cnt, cnt) dp[i][j] += dp[k - 1][j - 1] * sum % MOD; dp[i][j] %= MOD; //if (i == 3 && j == 1) cout << k << ' ' << sum << " " << dp[k - 1][j - 1] << '\n'; } } //cout << "Doan " << i << " la [" << l[i] << ", " << r[i] << "], "; //cout << "Segment " << j << ": [" << a << ", " << b << "], "; //cout << "dp[" << i << "][" << j << "]: " << dp[i][j] << '\n'; } } cout << (dp[n][segment.size() - 1] - 1 + MOD) % MOD; }

컴파일 시 표준 에러 (stderr) 메시지

boat.cpp:21:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   21 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...