답안 #699570

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
699570 2023-02-17T12:18:33 Z Abrar_Al_Samit Boat (APIO16_boat) C++17
36 / 100
2000 ms 5016 KB
#include<bits/stdc++.h>
using namespace std;

const int nax = 503;
const int mod = 1e9 + 7;

vector<int>ind[nax*2];
int a[nax], b[nax];
int n, m;
int dp[nax*2][nax];
int inv[nax];
vector<int>imp;

int add(int a, int b) {
  a += b;
  if(a>=mod) a -= mod;
  return a;
}
int mul(int a, int b) {
  return (a * 1LL * b) % mod;
}
int quickpow(int a, int b) {
  int ret = 1;
  while(b) {
    if(b&1) ret = mul(ret, a);
    a = mul(a, a);
    b >>= 1;
  }
  return ret;
}

int get(int x) {
  int &ret = inv[x];
  if(ret==-1) {
    ret = quickpow(x, mod-2);
  }
  return ret;
}
map<pair<int,int>,int>table;
int C(int n, int r) {
  int& ret = table[{n, r}];
  if(ret==0) {
    ret = 1;
    for(int i=n-r+1; i<=n; ++i) {
      ret = mul(ret, i);
    }
    for(int i=1; i<=r; ++i) {
      ret = mul(ret, get(i));
    }
  }
  return ret;
}

map<pair<int,int>,int>andp;
int get(int len, int op) {
  int &ret = andp[make_pair(len, op)];
  if(ret==0) {
    for(int take=0; take<=min(op, len-1); ++take) {
      ret = add(ret, mul(C(op, take), C(len, take+1)));
    }
  }
  return ret;
}
int solve(int i, int prv) {
  if(i==m-1) return prv>0;
  int &ret = dp[i][prv];
  if(ret!=-1) return ret;
  ret = 0;

  ret = solve(i+1, prv);
  int len = imp[i+1]-imp[i];

  for(int mx=0, cur_op=0; mx<ind[i].size(); ++mx) {
    if(ind[i][mx]<=prv) continue;

    int cur = mul(solve(i+1, ind[i][mx]), get(len, cur_op));
    cur_op++;
    ret = add(ret, cur);
  }
  return ret;
}
void PlayGround() {
  cin>>n;
  set<int>pts;
  for(int i=1; i<=n; ++i) {
    cin>>a[i]>>b[i];
    pts.insert(a[i]);
    pts.insert(b[i]+1);
  }

  for(int x : pts) {
    imp.push_back(x);
  } 
  m = imp.size();
  for(int i=0; i<m; ++i) {
    for(int j=1; j<=n; ++j) {
      if(imp[i]>=a[j] && imp[i]<=b[j]) {
        ind[i].push_back(j);
      }
    }
  }
  memset(inv, -1, sizeof inv);
  memset(dp, -1, sizeof dp);
  cout<<solve(0, 0)<<'\n';


  // cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  PlayGround();
  return 0;
}

Compilation message

boat.cpp: In function 'int solve(int, int)':
boat.cpp:73:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |   for(int mx=0, cur_op=0; mx<ind[i].size(); ++mx) {
      |                           ~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2388 KB Output is correct
2 Correct 6 ms 2388 KB Output is correct
3 Correct 6 ms 2388 KB Output is correct
4 Correct 6 ms 2388 KB Output is correct
5 Correct 7 ms 2388 KB Output is correct
6 Correct 6 ms 2388 KB Output is correct
7 Correct 6 ms 2612 KB Output is correct
8 Correct 6 ms 2504 KB Output is correct
9 Correct 6 ms 2388 KB Output is correct
10 Correct 6 ms 2504 KB Output is correct
11 Correct 7 ms 2388 KB Output is correct
12 Correct 6 ms 2388 KB Output is correct
13 Correct 7 ms 2388 KB Output is correct
14 Correct 6 ms 2444 KB Output is correct
15 Correct 7 ms 2504 KB Output is correct
16 Correct 4 ms 2260 KB Output is correct
17 Correct 3 ms 2260 KB Output is correct
18 Correct 3 ms 2364 KB Output is correct
19 Correct 4 ms 2260 KB Output is correct
20 Correct 4 ms 2260 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2388 KB Output is correct
2 Correct 6 ms 2388 KB Output is correct
3 Correct 6 ms 2388 KB Output is correct
4 Correct 6 ms 2388 KB Output is correct
5 Correct 7 ms 2388 KB Output is correct
6 Correct 6 ms 2388 KB Output is correct
7 Correct 6 ms 2612 KB Output is correct
8 Correct 6 ms 2504 KB Output is correct
9 Correct 6 ms 2388 KB Output is correct
10 Correct 6 ms 2504 KB Output is correct
11 Correct 7 ms 2388 KB Output is correct
12 Correct 6 ms 2388 KB Output is correct
13 Correct 7 ms 2388 KB Output is correct
14 Correct 6 ms 2444 KB Output is correct
15 Correct 7 ms 2504 KB Output is correct
16 Correct 4 ms 2260 KB Output is correct
17 Correct 3 ms 2260 KB Output is correct
18 Correct 3 ms 2364 KB Output is correct
19 Correct 4 ms 2260 KB Output is correct
20 Correct 4 ms 2260 KB Output is correct
21 Correct 1432 ms 4184 KB Output is correct
22 Correct 1336 ms 4856 KB Output is correct
23 Correct 1262 ms 4304 KB Output is correct
24 Correct 1275 ms 4196 KB Output is correct
25 Correct 1354 ms 4240 KB Output is correct
26 Execution timed out 2077 ms 5016 KB Time limit exceeded
27 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 3184 KB Output is correct
2 Correct 25 ms 3112 KB Output is correct
3 Correct 30 ms 3256 KB Output is correct
4 Correct 36 ms 3244 KB Output is correct
5 Correct 37 ms 3328 KB Output is correct
6 Correct 72 ms 3900 KB Output is correct
7 Correct 73 ms 3936 KB Output is correct
8 Correct 73 ms 3920 KB Output is correct
9 Correct 74 ms 3828 KB Output is correct
10 Correct 74 ms 3876 KB Output is correct
11 Correct 38 ms 3328 KB Output is correct
12 Correct 28 ms 3136 KB Output is correct
13 Correct 33 ms 3252 KB Output is correct
14 Correct 32 ms 3140 KB Output is correct
15 Correct 37 ms 3252 KB Output is correct
16 Correct 17 ms 2820 KB Output is correct
17 Correct 15 ms 2728 KB Output is correct
18 Correct 17 ms 2736 KB Output is correct
19 Correct 15 ms 2664 KB Output is correct
20 Correct 18 ms 2740 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2388 KB Output is correct
2 Correct 6 ms 2388 KB Output is correct
3 Correct 6 ms 2388 KB Output is correct
4 Correct 6 ms 2388 KB Output is correct
5 Correct 7 ms 2388 KB Output is correct
6 Correct 6 ms 2388 KB Output is correct
7 Correct 6 ms 2612 KB Output is correct
8 Correct 6 ms 2504 KB Output is correct
9 Correct 6 ms 2388 KB Output is correct
10 Correct 6 ms 2504 KB Output is correct
11 Correct 7 ms 2388 KB Output is correct
12 Correct 6 ms 2388 KB Output is correct
13 Correct 7 ms 2388 KB Output is correct
14 Correct 6 ms 2444 KB Output is correct
15 Correct 7 ms 2504 KB Output is correct
16 Correct 4 ms 2260 KB Output is correct
17 Correct 3 ms 2260 KB Output is correct
18 Correct 3 ms 2364 KB Output is correct
19 Correct 4 ms 2260 KB Output is correct
20 Correct 4 ms 2260 KB Output is correct
21 Correct 1432 ms 4184 KB Output is correct
22 Correct 1336 ms 4856 KB Output is correct
23 Correct 1262 ms 4304 KB Output is correct
24 Correct 1275 ms 4196 KB Output is correct
25 Correct 1354 ms 4240 KB Output is correct
26 Execution timed out 2077 ms 5016 KB Time limit exceeded
27 Halted 0 ms 0 KB -