제출 #637076

#제출 시각아이디문제언어결과실행 시간메모리
637076IWTIMBoat (APIO16_boat)C++17
9 / 100
2068 ms6360 KiB
# include <bits/stdc++.h> using namespace std; using ll = long long; using db = long double; // or double, if TL is tight using str = string; // yay python! // pairs using pii = pair<int,int>; using pl = pair<ll,ll>; using pd = pair<db,db>; #define mp make_pair #define f first #define s second #define tcT template<class T #define tcTU tcT, class U // ^ lol this makes everything look weird but I'll try it tcT> using V = vector<T>; tcT, size_t SZ> using AR = array<T,SZ>; using vi = V<int>; using vb = V<bool>; using vl = V<ll>; using vd = V<db>; using vs = V<str>; using vpi = V<pii>; using vpl = V<pl>; using vpd = V<pd>; // vectors // oops size(x), rbegin(x), rend(x) need C++17 #define sz(x) int((x).size()) #define bg(x) begin(x) #define all(x) bg(x), end(x) #define rall(x) x.rbegin(), x.rend() #define sor(x) sort(all(x)) #define rsz resize #define ins insert #define pb push_back #define eb emplace_back #define ft front() #define bk back() #define lb lower_bound #define ub upper_bound #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define F0R(i,a) FOR(i,0,a) #define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i) #define R0F(i,a) ROF(i,0,a) #define rep(a) F0R(_,a) #define each(a,x) for (auto& a: x) const int MOD = 998244353; const int MX = 2e5+5; const ll BIG = 1e18; // not too close to LLONG_MAX const db PI = acos((db)-1); const int dx[4]{1,0,-1,0}, dy[4]{0,1,0,-1}; // for every grid problem!! mt19937 rng((uint32_t)chrono::steady_clock::now().time_since_epoch().count()); template<class T> using pqg = priority_queue<T,vector<T>,greater<T>>; struct DSU { vi e; void init(int N) { e = vi(N,-1); } int get(int x) { return e[x] < 0 ? x : e[x] = get(e[x]); } bool sameSet(int a, int b) { return get(a) == get(b); } int size(int x) { return -e[get(x)]; } bool unite(int x, int y) { // union by size x = get(x), y = get(y); if (x == y) return 0; if (e[x] > e[y]) swap(x,y); e[x] += e[y]; e[y] = x; return 1; } }; /* inline namespace Helpers { //////////// is_iterable // https://stackoverflow.com/questions/13830158/check-if-a-variable-type-is-iterable // this gets used only when we can call begin() and end() on that type tcT, class = void> struct is_iterable : false_type {}; tcT> struct is_iterable<T, void_t<decltype(begin(declval<T>())), decltype(end(declval<T>())) > > : true_type {}; tcT> constexpr bool is_iterable_v = is_iterable<T>::value; //////////// is_readable tcT, class = void> struct is_readable : false_type {}; tcT> struct is_readable<T, typename std::enable_if_t< is_same_v<decltype(cin >> declval<T&>()), istream&> > > : true_type {}; tcT> constexpr bool is_readable_v = is_readable<T>::value; //////////// is_printable // // https://nafe.es/posts/2020-02-29-is-printable/ tcT, class = void> struct is_printable : false_type {}; tcT> struct is_printable<T, typename std::enable_if_t< is_same_v<decltype(cout << declval<T>()), ostream&> > > : true_type {}; tcT> constexpr bool is_printable_v = is_printable<T>::value; }*/ using ll = long long; using db = long double; // or double, if TL is tight using str = string; // yay python! // pairs using pii = pair<int,int>; using pl = pair<ll,ll>; using pd = pair<db,db>; #define mp make_pair #define f first #define s second #define tcT template<class T #define tcTU tcT, class U // ^ lol this makes everything look weird but I'll try it tcT> using V = vector<T>; tcT, size_t SZ> using AR = array<T,SZ>; using vi = V<int>; using vb = V<bool>; using vl = V<ll>; using vd = V<db>; using vs = V<str>; using vpi = V<pii>; using vpl = V<pl>; using vpd = V<pd>; // vectors // oops size(x), rbegin(x), rend(x) need C++17 #define sz(x) int((x).size()) #define bg(x) begin(x) #define all(x) bg(x), end(x) #define rall(x) x.rbegin(), x.rend() #define sor(x) sort(all(x)) #define rsz resize #define ins insert #define pb push_back #define eb emplace_back #define ft front() #define bk back() #define lb lower_bound #define ub upper_bound #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define F0R(i,a) FOR(i,0,a) #define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i) #define R0F(i,a) ROF(i,0,a) #define rep(a) F0R(_,a) #define each(a,x) for (auto& a: x) template<class T> using pqg = priority_queue<T,vector<T>,greater<T>>; /* inline namespace Helpers { //////////// is_iterable // https://stackoverflow.com/questions/13830158/check-if-a-variable-type-is-iterable // this gets used only when we can call begin() and end() on that type tcT, class = void> struct is_iterable : false_type {}; tcT> struct is_iterable<T, void_t<decltype(begin(declval<T>())), decltype(end(declval<T>())) > > : true_type {}; tcT> constexpr bool is_iterable_v = is_iterable<T>::value; //////////// is_readable tcT, class = void> struct is_readable : false_type {}; tcT> struct is_readable<T, typename std::enable_if_t< is_same_v<decltype(cin >> declval<T&>()), istream&> > > : true_type {}; tcT> constexpr bool is_readable_v = is_readable<T>::value; //////////// is_printable // // https://nafe.es/posts/2020-02-29-is-printable/ tcT, class = void> struct is_printable : false_type {}; tcT> struct is_printable<T, typename std::enable_if_t< is_same_v<decltype(cout << declval<T>()), ostream&> > > : true_type {}; tcT> constexpr bool is_printable_v = is_printable<T>::value; }*/ #define int long long const int N = 1005, mod = 1e9 + 7; int t,n,a[N],b[N],pr[N][N],dp[N][N],inv[N],fq[N]; vector <int> v; int f_p(int base, int power) { int result = 1; while (power > 0) { if (power % 2) result = (result * base) % mod; base = (base * base) % mod; power /= 2; } return result; } int C(int n, int k) { if (n < k) return 0; if (n == 0 && k == 0) return 1; int pas = 1; for (int i = n; i >= n - k + 1; i--){ pas *= i; pas %= mod; } pas *= inv[k];pas %= mod; return pas; } int check(int le, int ri, int a, int b) { return (max(a,le) <= min(b,ri)); } main() { ios_base::sync_with_stdio(false), cin.tie(NULL),cout.tie(NULL); cin>>n; for (int i = 1; i <= n; i++) { cin>>a[i]>>b[i]; v.pb(a[i]); v.pb(b[i] + 1); } fq[0] = 1; inv[0] = 1; for (int i = 1; i < N; i++) { fq[i] = fq[i - 1] * i % mod; } inv[N - 1] = f_p(fq[N - 1], mod - 2); for (int i = N - 2; i >= 1; i--) { inv[i] = (inv[i + 1] * (i + 1)) % mod; } sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end())-v.begin()); vector <pii> seg; seg.pb({-1,-1}); for (int i = 1; i < v.size(); i++) { //if (v[i - 1] != 3) // !!!!!!!!!!!!!!!!!! seg.pb({v[i - 1], v[i] - 1}); } dp[0][0] = 1; pr[0][0] = 1; int ans = 0; for (int i = 1; i < seg.size(); i++) pr[0][i] = 1;//, cout<<seg[i].f<<" "<<seg[i].s<<endl; for (int i = 1; i <= n; i++) { for (int j = 1; j < seg.size(); j++) { int le = seg[j].f; int ri = seg[j].s; if (check(le,ri,a[i],b[i])) { int cnt = 1; for (int prless = i - 1; prless >= 0; prless--) { for (int cn = 1; cn <= cnt; cn++) { //if ( i == 5 && j == 4) cout<<prless<<" --- > "<<pr[prless][j - 1] * C(ri - le + 1, cn) % mod<<endl; dp[i][j] += pr[prless][j - 1] * C(ri - le + 1, cn) * C(cnt-1,cn-1) % mod, dp[i][j] %= mod; } if ((check(le,ri,a[prless],b[prless]))) cnt++; } } //if (dp[i][j]) cout<<i<<" "<<j<<" "<<dp[i][j]<<endl; ans += dp[i][j]; ans %= mod; pr[i][j] = (dp[i][j] + pr[i][j - 1]); pr[i][j] %= mod; } } cout<<ans<<"\n"; }

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

boat.cpp:208:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  208 | main() {
      | ^~~~
boat.cpp: In function 'int main()':
boat.cpp:230:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int, std::allocator<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  230 |  for (int i = 1; i < v.size(); i++) {
      |                  ~~^~~~~~~~~~
boat.cpp:237:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  237 |  for (int i = 1; i < seg.size(); i++) pr[0][i] = 1;//, cout<<seg[i].f<<" "<<seg[i].s<<endl;
      |                  ~~^~~~~~~~~~~~
boat.cpp:239:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  239 |   for (int j = 1; j < seg.size(); 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...