Submission #1288800

#TimeUsernameProblemLanguageResultExecution timeMemory
1288800Jawad_Akbar_JJBoat (APIO16_boat)C++20
0 / 100
20 ms10340 KiB
#include <iostream> #include <map> using namespace std; #define int long long const int N = 505; int l[N], r[N], Sz[N<<2], cur, dp[N][N<<2], ways[N<<2][N], inv[N], mod = 1e9 + 7; map<int, int> mp, mp2; int power(int a, int b){ if (b == 1) return a; int ans = power(a, b / 2); ans = ans * ans % mod; if (b % 2) ans = ans * a % mod; return ans; } signed main(){ for (int i=1;i<N;i++) inv[i] = power(i, mod - 2); int n, lst = -1, Ans = 0; cin>>n; for (int i=1;i<=n;i++){ cin>>l[i]>>r[i]; mp[l[i] - 1]; mp[r[i]]; } for (auto [i, j] : mp){ mp2[i] = ++cur; if (lst == -1) Sz[cur] = 1; else Sz[cur] = i - lst; lst = i; } for (int i=1;i<=n;i++){ l[i] = mp2[l[i] - 1] + 1; r[i] = mp2[r[i]]; } for (int i=1;i<=cur;i++){ for (int m=0;m<=n;m++){ int ch1 = 1, ch2 = 1; for (int j=0;j<=min(m, Sz[cur] - 1);j++){ ch1 = ch1 * (Sz[i] - j) % mod * inv[j + 1] % mod; ways[i][m] = (ways[i][m] + ch1 * ch2) % mod; ch2 = ch2 * (m - j) % mod * inv[j + 1] % mod; } } } for (int j=0;j<=cur;j++) dp[0][j] = 1; for (int i=1;i<=n;i++){ for (int cr=l[i];cr <= r[i];cr++){ int m = 0; for (int j=i-1;j>=0;j--){ dp[i][cr] = (dp[i][cr] + dp[j][cr - 1] * ways[cr][m]) % mod; m += (cr >= l[j] and cr <= r[j]); } Ans += dp[i][cr]; } for (int j=1;j<=cur;j++) dp[i][j] = (dp[i][j-1] + dp[i][j]) % mod; } cout<<Ans<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...