Advertisement
shamiul93

LightOJ 1005 - Rooks

May 14th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.71 KB | None | 0 0
  1. /**
  2. @author - Rumman BUET CSE'15
  3.  
  4. Problem - 1005 - Rooks
  5. Concept - DP , Easy one.
  6.  
  7. Barriers - ট্রিক খাটানো লাগে একটু । nCr বের করার সময় যে বাংলা নিয়ম আমরা ইউজ করি সেটা করা যাবে না ।
  8.  
  9. nCr = n! / ( r! * ( n - r ) ! ) ; - এই ফরমুলা ইউজ করলে ডিনমিনেটরের গুণফল ওভারফ্লো হবে ।
  10.  
  11. এজন্য ডিপি ইউজ করা লাগবে আর কি । ডিপি তে nCr বের করতে যোগের সূত্র ইউজ করবো ।
  12.  
  13. nCr + nC(r-1) = (n+1)Cr
  14.  
  15. ইন্টারের ফরমুলা ।
  16.  
  17. আর মূল অব্জারভেশন -
  18.  
  19. অ্যাটাকিং থাকবে না কত উপায়ে ? রো কতভাবে চুজ করা যায় ? রো চুজ করার পর ওই রো তে কয়টা কলামে রুক গুলাকে বসানো যায় ? এটা সমাবেশ বাইর
  20. করলেই এন্সার ।
  21. */
  22.  
  23.  
  24.  
  25. // LightOJ always needs this format for sure..so I made a copy of it...
  26. #include <bits/stdc++.h>
  27. #include<vector>
  28. #define ll                                      unsigned long long int
  29. #define fi                                      freopen("in.txt", "r", stdin)
  30. #define fo                                      freopen("out.txt", "w", stdout)
  31. #define m0(a) memset(a , 0 , sizeof(a))
  32. #define m1(a) memset(a , -1 , sizeof(a))
  33.  
  34. #define mx 100000007
  35. using namespace std;
  36.  
  37. ll dp[40][40] = {} ;
  38.  
  39. ll C(ll n, ll r)
  40. {
  41.     if(r == 0)
  42.     {
  43.         dp[n][r] = 1 ;
  44.         return 1 ;
  45.     }
  46.     if(r == 1)
  47.     {
  48.         dp[n][r] = n ;
  49.         return n ;
  50.  
  51.     }
  52.     if(n == r)
  53.     {
  54.         dp[n][r] = 1 ;
  55.         return 1 ;
  56.     }
  57.  
  58.     if(dp[n][r] != 0)
  59.     {
  60.         return dp[n][r] ;
  61.     }
  62.  
  63.     return dp[n][r] = C(n-1, r-1) + C(n-1, r) ;
  64. }
  65.  
  66. int main()
  67. {
  68. //    fi ;
  69. //    fo  ;
  70.  
  71.     dp[0][0] = 1 ;
  72.  
  73.     ll T, t = 0 ;
  74.     scanf("%llu",&T) ;
  75.  
  76.     while(T--)
  77.     {
  78.         t++ ;
  79.         ll n, k ;
  80.         scanf("%llu %llu",&n, &k) ;
  81.  
  82.         printf("Case %llu: ",t) ;
  83.  
  84.         if(k == 0)
  85.         {
  86.             printf("1\n") ;
  87.         }
  88.         else if(k > n)
  89.         {
  90.             printf("0\n") ;
  91.         }
  92.         else
  93.         {
  94.             ll mul =  1, ans ;
  95.             ll nck ;
  96.  
  97.             nck = C(n,k) ;
  98.  
  99.             while(k--)
  100.             {
  101.                 mul *= n ;
  102.                 n-- ;
  103.             }
  104.             ans = nck * mul ;
  105.  
  106.             printf("%llu\n",ans) ;
  107.         }
  108.     }
  109.     return 0 ;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement