Submission #742023

#TimeUsernameProblemLanguageResultExecution timeMemory
742023vjudge1Boat (APIO16_boat)C++17
0 / 100
1308 ms11396 KiB
#include <algorithm> #include <iostream> #include <iomanip> #include <bitset> #include <cmath> #include <queue> #include <map> #include <set> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ent "\n" const int maxn = 5e2 + 100; const ll INF = (1ll<<61); const int MOD = 1e9 + 7; const int inf = (1<<30); const int maxl = 20; const int P = 31; int n; int a[maxn]; int b[maxn]; ll dp[550][1010]; int cal[maxn]; ll f[maxn * 2][maxn]; ll br[maxn]; ll cnk[maxn][maxn]; vector<int> v; ll binpow(ll a, ll b){ if(!b) return 1; ll num = binpow(a, b >> 1); num = num * num % MOD; if(b & 1) num = num * a % MOD; return num; } int c(int n, int k){ if(k > n) return 0; ll ans = 1; for(int i = n - k + 1; i <= n; i++){ ans = (ans * i) % MOD; } for(int i = 1; i <= k; i++){ ans = (ans * br[i]) % MOD; } return ans; } bool ok(int i, int j){ return v[j] >= a[i] && v[j+1] - 1 <= b[i]; } void test(){ cin >> n; for(int i = 1; i <= n; i++){ cin >> a[i] >> b[i]; v.push_back(a[i]); v.push_back(b[i] + 1); br[i] = binpow(i, MOD - 2); } v.push_back(1e9 + 1); sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end()) - v.begin()); int ans = 0; cnk[0][0] = 1; for(int i = 1; i <= n; i++){ for(int j = 0; j <= i; j++){ cnk[i][j] = cnk[i-1][j]; if(j) cnk[i][j] = (cnk[i][j] + cnk[i-1][j-1]) % MOD; } } for(int i = 0; i < v.size() - 1; i++){ for(int j = 0; j <= n; j++){ f[i][j] = c(v[i+1] - v[i], j); } for(int j = n - 1; j > 0; j--){ for(int k = j + 1; k <= n; k++){ f[i][k] = (f[i][k] + 1ll * cnk[k-1][j-1] * f[i][j]) % MOD; } } } for(int i = 1; i <= n; i++){ for(int k = i - 1; k > 0; k--){ for(int j = 0; j < v.size() - 1; j++){ if(ok(k+1, j)) cal[j]++; if(j) dp[i][j] = (dp[i][j] + 1ll * dp[k][j-1] * f[j][cal[j]]) % MOD; } } for(int j = 0; j < v.size() - 1; j++){ dp[i][j] += f[j][cal[j]]; if(!ok(i, j)) dp[i][j] = 0; ans = (ans + dp[i][j]) % MOD; if(j) dp[i][j] = (dp[i][j] + dp[i][j-1]) % MOD; } } cout << ans << ent; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); int t; t = 1; while(t--) test(); }

Compilation message (stderr)

boat.cpp: In function 'void test()':
boat.cpp:76:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |     for(int i = 0; i < v.size() - 1; i++){
      |                    ~~^~~~~~~~~~~~~~
boat.cpp:88:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |             for(int j = 0; j < v.size() - 1; 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 = 0; j < v.size() - 1; j++){
      |                        ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...