# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
765582 | Deepesson | Kangaroo (CEOI16_kangaroo) | C++17 | 1 ms | 312 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define MAX 205
using ll = long long;
///Como funciona isso aqui?
///Todo cara OU eh aberto E fechado pela direita, ou eh aberto E fechado pela esquerda. Soh tem essas duas opcoes.
int N;
ll bits[MAX];
ll tab[MAX][MAX][MAX];
bool existe[MAX][MAX][MAX];
ll MOD = 2LL*(1e9+7);
ll dp(ll pos,ll v1,ll v2){
if(pos==N){
if(!v1&&!v2)return 1;
return 0;
}
if(existe[pos][v1][v2])return tab[pos][v1][v2];
existe[pos][v1][v2]=1;
ll res=0;
if(bits[pos]==1){///Caso especial
res=dp(pos+1,v1,v2+1);///Caso 1: Conecta com a direita
///Caso 2: Conecta na esquerda com um v1
if(v1)res=(res+(v1*dp(pos+1,v1-1,v2+1)))%MOD;
///Caso 3: Conecta na esquerda com um v2
if(v2)res=(res+(v2*dp(pos+1,v1,v2-1)))%MOD;
}else {
///Caso 1: Conecta na direita
res=dp(pos+1,v1+1,v2);
///CONECTANDO NA ESQUERDA
///Caso 2: Conecta dois v1s
# | 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... |