Submission #111237

#TimeUsernameProblemLanguageResultExecution timeMemory
111237tictaccatBoat (APIO16_boat)C++14
100 / 100
418 ms11128 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int MAX = 1000 + 5; const int MOD = 1e9 + 7; const int INV2 = 5e8 + 4; int N,ans; vector<int> a(MAX), b(MAX), ways(2*MAX), newWays(2*MAX), bin; //ways[i] = ways of ending between bin[i] and bin[i+1]-1 vector<vector<int>> Z(MAX), val(MAX,vector<int>(MAX)); vector<int> invs(MAX,-1); int exp(int a, int e) { if (e == 0) return 1; if (e%2 == 1) return a * exp(a,e-1) % MOD; int temp = exp(a,e/2); return temp * temp % MOD; } int inv(int k) { return exp(k,MOD-2); } int pre(int k) { int res = 0; int sz = bin[k+1] - bin[k]; val[k][0] = 1; for (int i = 1; i <= N; i++) { val[k][i] = val[k][i-1] * (sz+i-1) % MOD * inv(i) % MOD; } return res; } int calc(int k) { int res = 0; for (int i = 1; i <= Z[k].size(); i++) { res += val[k][i] * Z[k][Z[k].size()-i] % MOD; res %= MOD; } return res; } main() { cin >> N; for (int i = 0; i < N; i++) { cin >> a[i] >> b[i]; b[i]++; bin.push_back(a[i]); bin.push_back(b[i]); } bin.push_back(2); sort(bin.begin(),bin.end()); bin.erase(unique(bin.begin(),bin.end()),bin.end()); for (int i = 0; i < bin.size(); i++) pre(i); for (int i = 0; i < N; i++) { // cout << i << "\n"; int pre = 1, k = 0; for (; bin[k] < a[i]; k++) {pre += ways[k]; pre %= MOD;} for (; k+1 < bin.size() && bin[k+1] <= b[i]; k++) { Z[k].push_back(pre); newWays[k] = calc(k); pre += ways[k]; pre %= MOD; } ways = newWays; //cout << ways[0] << "\n"; } for (int k = 0; k < bin.size()-1; k++) {ans += ways[k]; ans %= MOD;} cout << (ans < 0 ? ans + MOD : ans) << "\n"; return 0; }

Compilation message (stderr)

boat.cpp: In function 'long long int calc(long long int)':
boat.cpp:39:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i <= Z[k].size(); i++) {
                     ~~^~~~~~~~~~~~~~
boat.cpp: At global scope:
boat.cpp:46:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main() {
      ^
boat.cpp: In function 'int main()':
boat.cpp:62:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < bin.size(); i++) pre(i);
                     ~~^~~~~~~~~~~~
boat.cpp:68:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (; k+1 < bin.size() && bin[k+1] <= b[i]; k++) {
                ~~~~^~~~~~~~~~~~
boat.cpp:78:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int k = 0; k < bin.size()-1; k++) {ans += ways[k]; ans %= MOD;}
                     ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...