답안 #322005

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
322005 2020-11-13T16:56:29 Z EndRay 캥거루 (CEOI16_kangaroo) C++17
6 / 100
1 ms 492 KB
#include<bits/stdc++.h>
#define ll long long

using namespace std;

const int N = 2000+1, mod = 1e9+7;

int n, i, j;

map<int, map<int, ll>> mp[N];

ll A[] = {1, 2, 16, 272, 7936};

ll f(int n, int i, int j){
    if(j == 1)
        return n == 1;
    if(i == 1 && j == 2){
        if((n&1) == 0)
            return 0;
        return A[(n-2)/2];
    }
    if(mp[n].find(i) != mp[n].end() && mp[n][i].find(j) != mp[n][i].end())
        goto END;
    if(i == 1){
        if(n&1) mp[n][i][j] = f(n, 1, j-1) - f(n-1, 1, j-1);
        else mp[n][i][j] =  f(n, 1, j-1) + f(n-1, 1, j-1);
    }
    else if(i == 2)
        mp[n][i][j] = f(n, 1, j) + f(n-1, 1, j-1);
    else mp[n][i][j] = 2*f(n, i-1, j) - f(n, i-2, j) - f(n-2, i-2, j-2);
    mp[n][i][j] %= mod;
END:
    return mp[n][i][j];
}

int main(){
    ios_base::sync_with_stdio(false);
    cout.tie(0);
    cin.tie(0);
    cin >> n >> i >> j;
    cout << f(n, i, j);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 492 KB Output is correct
2 Correct 1 ms 492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 492 KB Output is correct
2 Correct 1 ms 492 KB Output is correct
3 Incorrect 1 ms 492 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 492 KB Output is correct
2 Correct 1 ms 492 KB Output is correct
3 Incorrect 1 ms 492 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 492 KB Output is correct
2 Correct 1 ms 492 KB Output is correct
3 Incorrect 1 ms 492 KB Output isn't correct
4 Halted 0 ms 0 KB -