Advertisement
Guest User

Untitled

a guest
Nov 1st, 2014
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6.  
  7. long long int *t;
  8.  
  9.  inline long long int* at(int x, int y, int z, int w){
  10.     return t+x*(405*6*201)+y*(6*201)+z*6+w;
  11. }
  12.  
  13. long long int calculate(int x, int y, int z, int w){
  14.     if(abs(x)>200 || abs(y)>200 || w>200) return 0;
  15.     if(x==0 && y==0 &&z==0 && w==200) return 1;
  16.     long long int s;
  17.     if(*at(x+203,y+203,z,w)==-1){
  18.         switch(z){
  19.             case 0:
  20.                 s=calculate(x+1,y+1,5,w+1)+calculate(x+1,y+1,1,w+1);
  21.                 break;
  22.             case 1:
  23.                 s=calculate(x+2,y,0,w+1)+calculate(x+2,y,2,w+1);
  24.                 break;
  25.             case 2:
  26.                 s=calculate(x+1,y-1,1,w+1)+calculate(x+1,y-1,3,w+1);
  27.                 break;
  28.             case 3:
  29.                 s=calculate(x-1,y-1,2,w+1)+calculate(x+1,y+1,4,w+1);
  30.                 break;
  31.             case 4:
  32.                 s=calculate(x-1,y,3,w+1)+calculate(x-1,y,5,w+1);
  33.                 break;
  34.             default:
  35.                 s=calculate(x-1,y+1,4,w+1)+calculate(x-1,y+1,0,w+1);
  36.                 break;
  37.         }
  38.         *at(x+203,y+203,z,w)=s%123456789;
  39.     }
  40.     return *at(x+203,y+203,z,w);
  41. }
  42.  
  43.  
  44. int main(){
  45.     t = new long long int[405*405*6*201];
  46.     for(long long int i=0;i<405*405*6*201;++i){
  47.         t[i]=-1;
  48.     }
  49.    
  50.     printf("%lld\n",calculate(0,0,0,0));
  51.     system("pause");
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement