Submission #3910

#TimeUsernameProblemLanguageResultExecution timeMemory
3910imsifileHexagon travel (kriii1_H)C++98
1 / 1
576 ms1328 KiB
#include<stdio.h> #include<memory.h> #define md 1000000007 typedef long long ll; int l, r, m, ty; ll cmb[2][2222], dy[2][2222][6], t; // loop type : 0=RGB, 1=RBG, 2=GBR, 3=GRB, 4=BRG, 5=BGR int main(){ int i, j, k, x; scanf("%d%d%d", &l, &r, &m); for(i=0; i<=l+r; i++){ for(j=0; j<=r; j++){ if(i<j)break; if(i==j || !j)cmb[1-ty][j]=1; else{ cmb[1-ty][j]=cmb[ty][j]+cmb[ty][j-1]; if(cmb[1-ty][j]>=md)cmb[1-ty][j]-=md; } } ty=1-ty; } t=cmb[ty][r], ty=0; dy[ty][m][4]=1; for(i=l+r+m; i>0; i--){ memset(dy[1-ty],0,sizeof(dy[1-ty])); for(j=m; j>=0; j--){ if(i<j)continue; for(k=0; k<6; k++){ if(i-j>0){ dy[1-ty][j][k^1]+=dy[ty][j][k]; if(dy[1-ty][j][k^1]>=md)dy[1-ty][j][k^1]-=md; } if(j>0){ if(k%2)x=(k+4)%6; else x=(k+2)%6; dy[1-ty][j-1][x]+=dy[ty][j][k]; if(dy[1-ty][j-1][x]>=md)dy[1-ty][j-1][x]-=md; } } } ty=1-ty; } for(i=0; i<3; i++)printf("%lld\n", t*(dy[ty][0][2*i]+dy[ty][0][2*i+1])%md); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...