Submission #1220650


Source Code Expand

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <cassert>
using namespace std;

#define sz(a) int((a).size())
#define rep(i, s, n)  for(int i = s; i <= (n); ++i)
#define rev(i, n, s)  for(int i = (n); i >= s; --i)
#define fore(x, a) for(auto &&x : a)
typedef long long ll;
const int mod = 1000000007;
const int N = 105;

//map<pair<pair<int, int>, set<int>>, int> dp;
int dp[N][N][N];
int a[N];
int n;

/*
int go(int p, set<int> b, int prev) {
  if(p == 0) {
    return 1;
  }
  if(dp.find(make_pair(make_pair(p, prev), b)) != dp.end()) {
    return dp[make_pair(make_pair(p, prev), b)];
  }
  int &res = dp[make_pair(make_pair(p, prev), b)];
  res = 0;
  b.insert(a[p]);
  b.insert(a[2 * n - p]);
  fore(y, b) {
    set<int> c;
    for(set<int>::iterator it = b.begin(); it != b.end(); it++) {
        int x = *it;
        if((prev < x && x < y) || (y < x && x < prev)) {
          continue;
        } else {
          c.insert(x);
        }
      }
    res += go(p - 1, c, y);
    if(res >= mod) {
      res -= mod;
    }
  }
  return res;
}
*/

int go(int p, int b, int prev) {
  if(p == 0) {
    return 1;
  }
  int &res = dp[p][b][prev];
  if(res == -1) {
    res = 0;
    if(p != n) {
      if(a[p] != a[p + 1]) {
        b++;
        prev++;
      }
      if(a[2 * n - p] != a[2 * n - p - 1]) {
        b++;
      }
    }
    rep(y, 1, b) {
      int newb = b, newprev = prev;
      if(y > prev) {
        newb -= (y - prev - 1);
        newprev = prev + 1;
      }
      if(prev > y) {
        newb -= (prev - y - 1);
        newprev = y;
      }
      res += go(p - 1, newb, newprev);
      if(res >= mod) {
        res -= mod;
      }
    }
  }
  return res;
}

int main() {
#ifdef loc
  if(!freopen((string(FOLDER) + "inp.txt").c_str(), "r", stdin)) {
    assert(0);
  }
  freopen((string(FOLDER) + "out.txt").c_str(), "w", stdout);
#endif
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  rep(i, 1, 2 * n - 1) {
    cin >> a[i];
  }
  sort(a + 1, a + 2 * n);
  /*
  set<int> cands;
  cout << go(n, cands, a[n]) << endl;
  */
  memset(dp, -1, sizeof(dp));
  cout << go(n, 1, 1) << endl;
  return 0;
}

Submission Info

Submission Time
Task F - Prefix Median
User chintu
Language C++14 (GCC 5.4.1)
Score 2000
Code Size 2698 Byte
Status AC
Exec Time 32 ms
Memory 4736 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 2000 / 2000
Status
AC × 3
AC × 54
Set Name Test Cases
Sample 00_example_01.txt, 00_example_02.txt, 00_example_03.txt
All 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt
Case Name Status Exec Time Memory
00_example_01.txt AC 3 ms 4736 KB
00_example_02.txt AC 3 ms 4736 KB
00_example_03.txt AC 3 ms 4736 KB
01.txt AC 32 ms 4736 KB
02.txt AC 23 ms 4736 KB
03.txt AC 6 ms 4736 KB
04.txt AC 4 ms 4736 KB
05.txt AC 3 ms 4736 KB
06.txt AC 12 ms 4736 KB
07.txt AC 32 ms 4736 KB
08.txt AC 3 ms 4736 KB
09.txt AC 32 ms 4736 KB
10.txt AC 3 ms 4736 KB
11.txt AC 3 ms 4736 KB
12.txt AC 3 ms 4736 KB
13.txt AC 9 ms 4736 KB
14.txt AC 16 ms 4736 KB
15.txt AC 3 ms 4736 KB
16.txt AC 11 ms 4736 KB
17.txt AC 3 ms 4736 KB
18.txt AC 3 ms 4736 KB
19.txt AC 3 ms 4736 KB
20.txt AC 3 ms 4736 KB
21.txt AC 3 ms 4736 KB
22.txt AC 3 ms 4736 KB
23.txt AC 4 ms 4736 KB
24.txt AC 3 ms 4736 KB
25.txt AC 4 ms 4736 KB
26.txt AC 4 ms 4736 KB
27.txt AC 3 ms 4736 KB
28.txt AC 11 ms 4736 KB
29.txt AC 3 ms 4736 KB
30.txt AC 4 ms 4736 KB
31.txt AC 3 ms 4736 KB
32.txt AC 4 ms 4736 KB
33.txt AC 3 ms 4736 KB
34.txt AC 3 ms 4736 KB
35.txt AC 6 ms 4736 KB
36.txt AC 3 ms 4736 KB
37.txt AC 9 ms 4736 KB
38.txt AC 4 ms 4736 KB
39.txt AC 3 ms 4736 KB
40.txt AC 3 ms 4736 KB
41.txt AC 5 ms 4736 KB
42.txt AC 12 ms 4736 KB
43.txt AC 3 ms 4736 KB
44.txt AC 13 ms 4736 KB
45.txt AC 3 ms 4736 KB
46.txt AC 3 ms 4736 KB
47.txt AC 3 ms 4736 KB
48.txt AC 5 ms 4736 KB
49.txt AC 7 ms 4736 KB
50.txt AC 3 ms 4736 KB
51.txt AC 3 ms 4736 KB