답안 #526892

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
526892 2022-02-16T14:37:40 Z tphuc2908 캥거루 (CEOI16_kangaroo) C++14
100 / 100
29 ms 14108 KB
#include<bits/stdc++.h>

using namespace std;
//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma")
//#pragma GCC optimization ("unroll-loops")
#define rep(i, x, y) for(int i = x; i <= y; ++i)
#define repi(i,x,y) for(int i = x; i >= y; --i)
#define ci(x) int x; cin>> x
#define TC(t) ci(t); while(t--)
#define fi first
#define se second
#define pb push_back
#define all(x) x.begin(), x.end()
#define cii(x, y) ci(x); ci(y)
#define ciii(x, y, z) ci(x); ci(y); ci(z)
#define mp make_pair
//#define int long long
typedef long long ll;
typedef vector<int> vi;
const int N = 2e3 + 5;
const int NN = 16 + 15;
const int mod = 1e9+7;
const int mod1 = 1e9 + 9;
const int pi = 31;
const int inf = 1e9 + 6;
const int block = 500;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, -1, 0, 1};

void readfile(){
    #ifdef ONLINE_JUDGE
    #else
        freopen("text.inp", "r", stdin);
    #endif // ONLINE_JUDGE
//    freopen("connect.in", "r", stdin);
//    freopen("connect.out", "w", stdout);
}

int n, s, t;

void inp(){
    cin >> n >> s >> t;
}

int dp[N][N];

int add(int x, int y){
    x += y;
    while(x >= mod) x -= mod;
    while(x < 0) x += mod;
    return x;
}

int mul(int x, int y){
    return (x * 1LL * y) % mod;
}

void process(){
    dp[0][0] = 1;
    for(int i = 0; i < n; ++i){
        for(int j = 0; j <= i; ++j){
            if(i+1==s || i+1==t){
                dp[i+1][j] = add(dp[i+1][j], dp[i][j]); // add vo component dau tien
                dp[i+1][j+1] = add(dp[i+1][j+1], dp[i][j]); // tao mot component moi ben trai cung
            }
            else{
                if(i + 1 < s && i + 1 < t){
                    dp[i+1][j+1] = add(dp[i+1][j+1], mul(dp[i][j], j + 1)); // tao mot component moi, co j + 1 vi tri
                    if(j) dp[i+1][j-1] = add(dp[i+1][j-1], mul(dp[i][j], j-1)); // co j - 1 vi tri de merge
                }
                else if((i + 1 >= t && i + 1 < s) || (i + 1 >= s && i + 1 < t)){
                        dp[i+1][j+1] = add(dp[i+1][j+1], mul(dp[i][j], j)); // tao mot component moi khong duoc o ben trai cung || phai cung, co j vi tri
                        if(j) dp[i+1][j-1] = add(dp[i+1][j-1], mul(dp[i][j], j-1)); // co j - 1 vi tri de merge
                    }
                    else{
                        dp[i+1][j+1] = add(dp[i+1][j+1], mul(dp[i][j], j-1)); // tao mot component moi khong duoc o ben trai cung && phai cung, co j - 1 vi tri
                        if(j) dp[i+1][j-1] = add(dp[i+1][j-1], mul(dp[i][j], j-1)); // co j - 1 vi tri de merge
                    }
            }
        }
    }
    cout << dp[n][1];
}

int main() {
//    readfile();
    ios_base::sync_with_stdio(0);
    cin.tie(0);
//    TC(t){
        inp();
        process();
//        reset();
//    }
    return 0;
}

Compilation message

kangaroo.cpp: In function 'void readfile()':
kangaroo.cpp:34:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |         freopen("text.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 440 KB Output is correct
5 Correct 1 ms 448 KB Output is correct
6 Correct 1 ms 456 KB Output is correct
7 Correct 0 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 1 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 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 440 KB Output is correct
5 Correct 1 ms 448 KB Output is correct
6 Correct 1 ms 456 KB Output is correct
7 Correct 0 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 1 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 1084 KB Output is correct
13 Correct 1 ms 1076 KB Output is correct
14 Correct 2 ms 1152 KB Output is correct
15 Correct 1 ms 1100 KB Output is correct
16 Correct 1 ms 1088 KB Output is correct
17 Correct 2 ms 1108 KB Output is correct
18 Correct 1 ms 1100 KB Output is correct
19 Correct 1 ms 1088 KB Output is correct
20 Correct 1 ms 1100 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 440 KB Output is correct
5 Correct 1 ms 448 KB Output is correct
6 Correct 1 ms 456 KB Output is correct
7 Correct 0 ms 460 KB Output is correct
8 Correct 1 ms 460 KB Output is correct
9 Correct 1 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 1084 KB Output is correct
13 Correct 1 ms 1076 KB Output is correct
14 Correct 2 ms 1152 KB Output is correct
15 Correct 1 ms 1100 KB Output is correct
16 Correct 1 ms 1088 KB Output is correct
17 Correct 2 ms 1108 KB Output is correct
18 Correct 1 ms 1100 KB Output is correct
19 Correct 1 ms 1088 KB Output is correct
20 Correct 1 ms 1100 KB Output is correct
21 Correct 4 ms 3792 KB Output is correct
22 Correct 5 ms 4048 KB Output is correct
23 Correct 5 ms 4428 KB Output is correct
24 Correct 29 ms 14064 KB Output is correct
25 Correct 26 ms 14020 KB Output is correct
26 Correct 29 ms 14108 KB Output is correct
27 Correct 28 ms 14012 KB Output is correct
28 Correct 17 ms 10176 KB Output is correct