#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> a, vector<int> b) {
int n = a.size();
for(int i=0;i<n;i++)
if(a[i]>b[i])
return 0;
int dp[n];
for(int i=n;i--;) {
dp[i] = 0;
for(int j=i+1;j<n;j++)
if(a[j] > b[i])
dp[i] = max(dp[i], dp[j]);
dp[i]++;
}
int tim = 0, cnt = 0;
while(1) {
auto it = lower_bound(a.begin(),a.end(),tim);
if(it == a.end())
break;
tim = b[it-a.begin()];
cnt++;
}
return (cnt < *max_element(dp,dp+n));
}
int main() {
int n, p, ans = 0;
cin >> n >> p;
for(int i=0;i<(1<<(2*n));i++)
if(__builtin_popcount(i) == n) {
vector<int> a, b;
for(int j=0;j<2*n;j++)
(i&(1<<j)?b:a).push_back(j);
do
ans += solve(a, b);
while(next_permutation(b.begin(),b.end()));
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |