제출 #3846

#제출 시각아이디문제언어결과실행 시간메모리
3846wookayinHexagon travel (kriii1_H)C++98
1 / 1
376 ms1212 KiB
#include <stdio.h>
#include <memory.h>
 
const int mod = 1000000007;
int p[2][4023];
int d[2][2005][6];
int cm[6];
 
int main()
{
    int l,r,m;
        scanf("%d%d%d",&l,&r,&m);
        for(int i = 0; i <= l+r; i++){
                int ci = i % 2;
                int li = 1 - ci;
                p[ci][0] = p[ci][i] = 1;
                for(int j = 1; j < i; j++) {
                        p[ci][j] = (p[li][j] + p[li][j-1])%mod;
                }
        }
        cm[0] = 2;
        cm[1] = 5;
        cm[2] = 4;
        cm[3] = 1;
        cm[4] = 0;
        cm[5] = 3;
 
        d[0][0][4] = 1;
        for(int i = 0; i <= l+r; i++) {
                int ci = i%2;
                int ni = 1-ci;
                memset(d[ni],0,sizeof(d[0]));
                for(int j = 0; j <= m; j++) {
                        for(int k = 0; k < 6;k ++){
                                d[ni][j][k^1] = (d[ni][j][k^1] + d[ci][j][k])%mod;
                                d[ci][j+1][cm[k]] = (d[ci][j+1][cm[k]] + d[ci][j][k])%mod;
                        }
                }
        }
        for(int j = 0;j < 3;j++)
        {
                long long ans = 0;
                for(int i = 0; i <2; i++){
                        ans += d[(l+r)%2][m][i+j*2];
                }
                ans %= mod;
                ans *= p[(l+r)%2][l];
                ans %= mod;
                printf("%d\n", (int)ans);
        }
        return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...