Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std ;
  3.  
  4. typedef long long ll ;
  5.  
  6. ll N,M,K ;
  7. const ll mod = 1000000007LL ;
  8. ll ncr[300][55] ;
  9. ll calc[300][55][55] ;
  10.  
  11. ll NCR( ll n , ll r )
  12. {
  13.     if( n < r ) return 0 ;
  14.     if( n == r ) return 1 ;
  15.     if( r == 1 ) return n ;
  16.     if( ncr[n][r] != -1 ) return ncr[n][r] ;
  17.     ll ret = NCR(n-1,r-1) + NCR(n-1,r ) ;
  18.     ret %= mod ;
  19.     return ncr[n][r] = ret ;
  20. }
  21.  
  22. ll CALC( ll u , ll un , ll tot )
  23. {
  24.     if( u == 0 ) return (!un) ;
  25.     if(calc[u][un][tot] != -1 ) return calc[u][un][tot] ;
  26.     ll ret = 0 ;
  27.     ret = (tot-un)*CALC(u-1,un,tot ) ;
  28.     ret %= mod ;
  29.     if( un > 0 )ret += un * CALC(u-1,un-1,tot ) ;
  30.     ret %= mod ;
  31.  
  32.     return calc[u][un][tot] = ret ;
  33.  
  34. }
  35. ll cs, T ;
  36.  
  37. int main()
  38. {
  39.     memset(ncr,-1,sizeof(ncr)) ;
  40.      memset(calc,-1,sizeof(calc)) ;
  41.     scanf("%lld", &T ) ;
  42.     while(cs< T )
  43.     {
  44.         cs++ ;
  45.         scanf("%lld %lld %lld",&N,&M,&K ) ;
  46.         ll ans = 0 ;
  47.         ll tot = ( N + 1 ) * ( M+1 );
  48.         if( tot == 1 )
  49.         {
  50.             ans = K ;
  51.         }
  52.         else{
  53.              ll x = tot / 2 + tot % 2 ;
  54.             ll y = tot / 2 ;
  55.  
  56.             for( ll r = 1 ; r < K ; r++ )
  57.             {
  58.                 ll tem = ( ((NCR(K,r)* r)%mod) * CALC(x-1,r-1,r ) )%mod ;
  59.                 for( ll rr = 1 ; rr <= K - r ; rr++ ){
  60.                     ll tem2 =  ( (( NCR(K-r,rr) *rr) %mod)* CALC(y-1,rr-1,rr ) ) % mod ;
  61.  
  62.                     tem2 = ( tem * tem2 ) % mod ;
  63. //                    printf(" x = %lld & y = %lld & r = %lld & rr = %lld & res = %lld\n", x,y,r,rr,tem2 ) ;
  64. //
  65. //                    printf("NCR(%lld,%lld) = %lld && CALC(%lld,%lld) = %lld\n",K, r  , NCR(K,r), x ,  r , CALC(x-1,r-1,r )) ;
  66. //                    printf("NCR(%lld,%lld) = %lld && CALC(%lld,%lld) = %lld\n",K-r , rr ,NCR(K-r,rr),y ,  rr , CALC(y-1,rr-1,rr )) ;
  67.                     ans += tem2 ;
  68.                     ans %= mod ;
  69.                 }
  70.  
  71.             }
  72.         }
  73.  
  74.         printf("Case %lld: %lld\n", cs , ans ) ;
  75.  
  76.     }
  77.  
  78.  
  79.  
  80. return 0 ;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement