Submission #557301

#TimeUsernameProblemLanguageResultExecution timeMemory
557301kwongwengBoat (APIO16_boat)C++17
36 / 100
2012 ms4616 KiB
/* Solution for APIO 2016 - Boat Tags : */ #include <bits/stdc++.h> using namespace std; #pragma GCC target ("avx2") #pragma GCC optimization ("Ofast") #pragma GCC optimization ("unroll-loops") typedef long long ll; typedef vector<int> vi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef long double ld; typedef pair<ll, ll> pll; #define FOR(i, a, b) for(int i = a; i < b; i++) #define ROF(i, a, b) for(int i = a; i >= b; i--) #define ms memset #define pb push_back #define fi first #define se second ll MOD = 1000000007; ll power(ll base, ll n){ if (n == 0) return 1; if (n == 1) return base; ll halfn = power(base, n/2); if (n % 2 == 0) return (halfn * halfn) % MOD; return (((halfn * halfn) % MOD) * base) % MOD; } vector<ll> inv(501,-1); ll inverse(ll n){ if (inv[n] != -1) return inv[n]; return inv[n] = power(n, MOD-2); } ll add(ll a, ll b){ return (a+b) % MOD; } ll mul(ll a, ll b){ a %= MOD; return (a*b) % MOD; } ll gcd(ll a, ll b){ if (a == 1) return 1; if (a == 0) return b; return gcd(b%a, a); } vector<ll> cnt[1000]; // cnt[i][j] = # solution for first ith school with last student sent is in ith compartment from left, and there are j students in the compartment void solve(){ int n; cin >> n; vector<ll> a(n), b(n); FOR(i,0,n) cin >> a[i] >> b[i]; vector<pair<ll,int>> pos; FOR(i,0,n){ b[i]++; pos.pb({a[i], i}); pos.pb({b[i], i}); } sort(pos.begin(), pos.end()); vi l(n,-1), r(n,-1); FOR(i,0,2*n){ int j = pos[i].se; if (l[j] == -1) l[j] = i; else r[j] = i; } FOR(i,0,2*n-1){ cnt[i].pb(0); } FOR(i,0,n){ ll total = 1; FOR(j,0,l[i]){ for (ll val2 : cnt[j]){ total += val2; total %= MOD; } } //compartment from l[i] to r[i] ll val[i+2]; FOR(j,0,r[i]-l[i]){ val[0] = 0; ll interval = pos[j+l[i]+1].fi - pos[j+l[i]].fi; val[1] = mul(interval,total); for (ll val2 : cnt[j+l[i]]){ total += val2; total %= MOD; } FOR(k,2,i+2){ ll new_val = 0; if (cnt[j+l[i]].size()>=k) new_val = cnt[j+l[i]][k-1]; ll binom = mul(interval - k + 1, inverse(k)) ; // new_val = mul(new_val, binom); val[k] = new_val; } FOR(k,1,i+2){ if (k>=cnt[j+l[i]].size()){ cnt[j+l[i]].pb(val[k]); continue; } cnt[j+l[i]][k] = (cnt[j+l[i]][k] + val[k]) % MOD; } } } ll ans = 0; FOR(i,0,2*n-1){ for (ll val2 : cnt[i]){ ans = add(ans, val2); } } cout << ans; } int main() { ios::sync_with_stdio(false); if (fopen("input.txt", "r")) { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); } int TC = 1; //cin >> TC; FOR(i, 1, TC+1){ //cout << "Case #" << i << ": "; solve(); } }

Compilation message (stderr)

boat.cpp:10: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   10 | #pragma GCC optimization ("Ofast")
      | 
boat.cpp:11: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   11 | #pragma GCC optimization ("unroll-loops")
      | 
boat.cpp: In function 'void solve()':
boat.cpp:99:39: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   99 |                 if (cnt[j+l[i]].size()>=k) new_val = cnt[j+l[i]][k-1];
      |                     ~~~~~~~~~~~~~~~~~~^~~
boat.cpp:105:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |                 if (k>=cnt[j+l[i]].size()){
      |                     ~^~~~~~~~~~~~~~~~~~~~
boat.cpp: In function 'int main()':
boat.cpp:125:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  125 |   freopen("input.txt", "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
boat.cpp:126:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  126 |   freopen("output.txt", "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...