Submission #1356252

#TimeUsernameProblemLanguageResultExecution timeMemory
1356252avighnaFestivals in JOI Kingdom 2 (JOI23_festival2)C++20
5 / 100
9090 ms344 KiB
#include <bits/stdc++.h>

using namespace std;

int solve(vector<pair<int, int>> &a) {
  int st = 0, ans = 0;
  for (auto &[l, r] : a) {
    if (l < st) {
      continue;
    }
    ans++;
    st = r;
  }
  return ans;
}

int solve_bad(vector<pair<int, int>> a) {
  return solve(a);
}

int solve_good(vector<pair<int, int>> a) {
  sort(a.begin(), a.end(), [&](pair<int, int> a, pair<int, int> b) { return a.second < b.second; });
  return solve(a);
}

int main() {
  cin.tie(nullptr)->sync_with_stdio(false);

  int n, md;
  cin >> n >> md;

  int64_t ans = 0;
  string s = string(n, '*') + string(n, '.');
  sort(s.begin(), s.end());
  do {
    vector<int> a, b;
    for (int i = 0; i < 2 * n; ++i) {
      if (s[i] == '*') {
        a.push_back(i);
      } else {
        b.push_back(i);
      }
    }
    do {
      int good = 1;
      vector<pair<int, int>> v;
      for (int i = 0; i < n; ++i) {
        if (a[i] > b[i]) {
          good = 0;
        }
        v.push_back({a[i], b[i]});
      }
      if (!good) {
        continue;
      }
      if (solve_bad(v) != solve_good(v)) {
        ans++;
      }
    } while (next_permutation(b.begin(), b.end()));
  } while (next_permutation(s.begin(), s.end()));

  cout << ans % md << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...