답안 #484198

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
484198 2021-11-02T11:21:29 Z n0sk1ll 캥거루 (CEOI16_kangaroo) C++14
100 / 100
12 ms 14080 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

#define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cerr.tie(0)
#define mp make_pair
#define xx first
#define yy second
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define all(x) (x).begin(),(x).end()
#define inv(n) power((n), mod - 2)
#define ff(i,a,b) for (int (i) = (a); (i) < (b); (i)++)
#define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
#define bff(i,a,b) for (int (i) = (b)-1; (i) >= (a); (i)--)
#define bfff(i,a,b) for (int (i) = (b); (i) >= (a); (i)--)
#define sum_overflow(a,b) __builtin_add_overflow_p ((a), (b), (__typeof__ ((a) + (b))) 0)
#define mul_overflow(a,b) __builtin_mul_overflow_p ((a), (b), (__typeof__ ((a) + (b))) 0)

using namespace std;
long double typedef ld;
unsigned int typedef ui;
long long int typedef li;
pair<int,int> typedef pii;
pair<li,li> typedef pli;
pair<ld,ld> typedef pld;
vector<vector<int>> typedef graph;
unsigned long long int typedef ull;
//const int mod = 998244353;
const int mod = 1000000007;

using namespace __gnu_pbds;
template <class T> using oset = tree<T, null_type,less<T>, rb_tree_tag,tree_order_statistics_node_update>;
template <class T> using omset = tree<T, null_type,less_equal<T>, rb_tree_tag,tree_order_statistics_node_update>;







//Note to self: Check for overflow

int dp[2004][2004];

int main()
{
    int n,s,f;
    cin>>n>>s>>f;

    dp[1][1]=1; int ended=0;
    if (s==1 || f==1) ended++;

    fff(i,2,n)
    {
        fff(k,1,i)
        {
            if (i==s || i==f) dp[i][k]=(dp[i-1][k-1]+dp[i-1][k])%mod;
            else dp[i][k]=((li)(max(0,k-ended))*dp[i-1][k-1] + (li)k*dp[i-1][k+1])%mod;
        }
        if (i==s || i==f) ended++;
    }

    /*fff(i,1,n)
    {
        fff(k,1,i) cout<<dp[i][k]<<" ";
        cout<<endl;
    }*/
    cout<<dp[n][1];
}

//Note to self: Check for overflow

Compilation message

kangaroo.cpp: In function 'int main()':
kangaroo.cpp:16:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
      |                             ^
kangaroo.cpp:56:5: note: in expansion of macro 'fff'
   56 |     fff(i,2,n)
      |     ^~~
kangaroo.cpp:16:29: warning: unnecessary parentheses in declaration of 'k' [-Wparentheses]
   16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
      |                             ^
kangaroo.cpp:58:9: note: in expansion of macro 'fff'
   58 |         fff(k,1,i)
      |         ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 296 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 460 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 0 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 0 ms 460 KB Output is correct
10 Correct 1 ms 460 KB Output is correct
11 Correct 1 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 296 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 460 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 0 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 0 ms 460 KB Output is correct
10 Correct 1 ms 460 KB Output is correct
11 Correct 1 ms 460 KB Output is correct
12 Correct 1 ms 1100 KB Output is correct
13 Correct 1 ms 1100 KB Output is correct
14 Correct 1 ms 1100 KB Output is correct
15 Correct 1 ms 1100 KB Output is correct
16 Correct 1 ms 1100 KB Output is correct
17 Correct 1 ms 1100 KB Output is correct
18 Correct 1 ms 972 KB Output is correct
19 Correct 1 ms 1100 KB Output is correct
20 Correct 1 ms 1100 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 296 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 460 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 1 ms 460 KB Output is correct
7 Correct 0 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 0 ms 460 KB Output is correct
10 Correct 1 ms 460 KB Output is correct
11 Correct 1 ms 460 KB Output is correct
12 Correct 1 ms 1100 KB Output is correct
13 Correct 1 ms 1100 KB Output is correct
14 Correct 1 ms 1100 KB Output is correct
15 Correct 1 ms 1100 KB Output is correct
16 Correct 1 ms 1100 KB Output is correct
17 Correct 1 ms 1100 KB Output is correct
18 Correct 1 ms 972 KB Output is correct
19 Correct 1 ms 1100 KB Output is correct
20 Correct 1 ms 1100 KB Output is correct
21 Correct 2 ms 3660 KB Output is correct
22 Correct 3 ms 4044 KB Output is correct
23 Correct 2 ms 4428 KB Output is correct
24 Correct 12 ms 14028 KB Output is correct
25 Correct 11 ms 14028 KB Output is correct
26 Correct 10 ms 14080 KB Output is correct
27 Correct 11 ms 14028 KB Output is correct
28 Correct 7 ms 10112 KB Output is correct