Submission #465522

#TimeUsernameProblemLanguageResultExecution timeMemory
465522BT21tataKangaroo (CEOI16_kangaroo)C++17
0 / 100
1 ms332 KiB
#include<bits/stdc++.h>
// #pragma GCC target ("avx,avx2,fma")
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("unroll-loops")
typedef long long ll;
typedef long double ld;
#define SPEED ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0)
#define rall(v) (v).rbegin(),(v).rend()
#define all(v) (v).begin(),(v).end()
#define OK cerr<<"OK"<<endl<<flush
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define F first
#define S second
#define y0 jahdakdh
#define y1 jahsadakdakdh
#define endl '\n'
const ll MOD=1e9+7;
using namespace std;
//mt19937 rng(std::chrono::system_clock::now().time_since_epoch().count());
 
int n, st, fin;
ll num[2005][2005][2];
bool used[2005], cal[2005][2005][2];

void f(int cur, int pr, int cnt)
{
    if(cal[cur][cnt][((cur<pr)?0:1)]) return;
    cal[cur][cnt][((cur<pr)?0:1)]=1;
    
    //cout<<pr<<' '<<cur<<' '<<cnt<<' '<<num[cur][cnt][((cur<pr)?0:1)]<<endl;
    
    if(cur==fin and cnt==n)
        num[cur][cnt][((cur<pr)?0:1)]++;
    
    used[cur]=1;
    
    for(int nxt=1; nxt<=n; nxt++)
        if(!used[nxt])
        {
            if(pr==-1)
            {
                f(nxt, cur, cnt+1);
                num[cur][cnt][1]+=num[nxt][cnt+1][((cur<nxt)?1:0)];
                num[cur][cnt][0]+=num[nxt][cnt+1][((cur<nxt)?1:0)];
            }
            else if(pr<cur and nxt<cur)
            {
                f(nxt, cur, cnt+1);
                num[cur][cnt][1]+=num[nxt][cnt+1][0];
            }
            else if(cur<pr and cur<nxt)
            {
                f(nxt, cur, cnt+1);
                num[cur][cnt][0]+=num[nxt][cnt+1][1];
            }
        }
    used[cur]=0;
}

// num[cur][cnt][0] --> cur<pr
// num[cur][cnt][1] --> pr<cur

int main()
{
    SPEED;
    cin>>n>>st>>fin;
    if(fin<st) swap(fin, st);
    f(st, -1, 1);
    cout<<num[st][1][0]+num[st][1][1];
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...