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 ...

KOPC12A

KOPC12A - K12 - Building Construction #include <iostream> #include <cmath> #define REP(i, n) for(int i = 0; i < n; i++) using namespace std; const int N = 10005; int height[N]; int cost[N]; int n; //finds the total cost for height h long long int findCost(int h) {     long long c = 0; //cost     REP(i, n)     {         c += abs(h - height[i]) * cost[i];     }     return c; } int ternary_search(int l, int h) {     while(l <= h)     {         if(l == h)             break;         int mid1 = l + (h - l) / 3;         int mid2 = h - (h - l) / 3;         if(findCost(mid1) > findCost(mid2))             l = mid1 + 1;         else ...

Cheese and Random Toppings

Problem Link #include <iostream> #include <vector> #include <cstring> using namespace std; #define LL long long int LL lucas(LL n,LL r,LL p) { LL ans=1,ncr[p][p]; memset(ncr, 0, sizeof ncr); for (int i = 0; i < p; ++i) { ncr[i][0]=1; } for (int i = 1; i < p; ++i) { for (int j = 1; j <= i; ++j) { ncr[i][j]=(ncr[i-1][j] + ncr[i-1][j-1])%p; } } while(n && r) { ans=(ans * ncr[n%p][r%p])%p; n/=p; r/=p; } return ans; } LL fastExpo(LL a, LL b, LL P) {   LL res = 1;   if(b==0) return 1; if(b==1) return a;   while (b) {     if (b & 1) {       res = (res * a) % P;     }     a = (a * a) % P;     b = b >> 1;   }   return res; } int main() { int t; cin>>t; while(t--) { long long int n,r,m,tm,ans=0; cin>>n>>r>>m; tm=m; for (int i = 2; i <= 50; ++i...