Skip to main content

Field Trip-FTRIP

Problem Link

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

const int N = 1001;
double ncr[N][N];

void calNCR()
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
            ncr[i][j] = 0;
    }

    for(int i = 0; i < N; i++)
    {
        ncr[i][0] = ncr[i][i] = 1.0;
        for(int j = 1; j < i; j++)
        {

            ncr[i][j] = ncr[i - 1][j - 1] + ncr[i - 1][j];
        }
    }
}

int main()
{
    int t, s, n, m, k;

    calNCR();
    cin >> t;
    for(int j = 0; j < t; j++)
    {
        cin >> s >> n >> m >> k;

        double den = ncr[s - 1][n - 1];
        double num = 0;

        /* if s = 6, m = 4, n = 4, k = 1. Here 2 people from m will go to the trip for sure.
           One of them is Alice, so one more friend will picked up for sure. So we should start checking              probability of picking from 2(mc2) because 1 will be picked up for sure
            so start i from max(k, n - 1 + m - s)  instead of k
        */

        for(int i = max(k, n - 1 + m - s); i <= min(m - 1, n - 1); i++)
        {
            num += (ncr[m - 1][i] * ncr[s - m][n - i - 1]);
        }
        printf("%.9lf\n", num/den);
    }
    return 0;
}

Comments

Popular posts from this blog

GCJ101BB - Picking Up Chicks

Problem Link /* explanation     lets solve the problem only for 2 chicken.     s[i] = speed of chicken i     pos[i] = position of chicken i     if s[i] > s[i - 1] then no problem, just check whether both can reach b within time or not.     if s[i] < s[i - 1] then there is a chance that i can slow down i - 1.     lets say s[i] = 1 m/sec and s[i - 1] = 2 m/sec and time limit is T and point to reach is B.     for s[i] pos[i] can be at max B - T. if pos is greater than B-T it can not reach within Tsec.     and for s[i - 1] pos[i - 1] can be at max (B-T)*2. if pos[i - 1] > (B-T)*2 it can not reach within Tsec.     at T sec i will be at B and i - 1 will also be at B. at T - 1 i will be at B-T-1 and i-1 will be at B-T-2 and so on. as we can see i -1 will always be behind i. so there will not be any collision.     if i is pos[i] < B-T then i can reach B before T sec ...

Yet Another Cute Girl - PRETNUM

Problem Link #include <iostream> #include <cstring> #include <cmath> #include <vector> using namespace std; #define LL long long const int N = 1000010; bool prime[N + 1]; vector<int> v; void sieve() { for(int i = 2; i <= N; i++) { prime[i] = true; } for(int i = 2; i * i <= N; i++) { if(prime[i]) { for(int j = i * i; j <= N; j += i) { prime[j] = false; } } } v.push_back(2); for(int i = 3; i <= N; i += 2) { if(prime[i]) { v.push_back(i); } } } LL getNumDiv(LL num) {     /* if prime factor of n is p1^k1 p2 ^ k2 then prime factor of n^2 would be         (p1^k1 p2 ^ k2)^2 = p1^(2k1) p2^(2k2)         so number of divisors of n^2 would be (2 * k1 + 1) * (2 * k2 + 1) ...         if n is a prime number number then number of divisors of n^2 would be 3.     */ LL res = 1; for(int i = 0;...

ANARC09A

ANARC09A - Seinfeld #include <iostream> #include <stack> using namespace std; stack<char> st; int main() {     string s;     int c, k;     k = 1;     while(true)     {         cin >> s;         c = 0;         if(s[0] == '-')             break;         for(int i = 0; i < s.size(); i++)         {             st.push(s[i]);             //stack contains } and { then we can safely remove them from stack             if(st.top() == '}' && st.size() != 1)             {                 char a = st.top();               ...