Cod sursa(job #1555711)

Utilizator mirupetPetcan Miruna mirupet Data 23 decembrie 2015 14:42:12
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
#define DIM 26
using namespace std;

float v[DIM], S, sol = 1;
bool b[DIM];
int N, K, a[DIM];

void Back(int, int, int);

int main()
    {
        freopen("dezastru.in","r",stdin);
        freopen("dezastru.out","w",stdout);

        scanf("%d%d", &N, &K);
        for (int i = 1; i <= N; i++)
            scanf("%f", &v[i]);
        Back(1, N, K);
        //printf("%f", S);

        for (int i = 2; i <= K; i++)
            S *= K;
        for (int i = 1; i <= (N - K); i++)
            S *= i;
        for (int i = N; i > N - K; i--)
            S /= i;
        printf("%f",S);
    }

void Back(int k, int Len, int NR)
{
    if (k - 1 == NR)
    {
        //printf("%f  ", sol);
        /*for (int i = 1; i <= NR; i++)
            printf("%f ", v[a[i]]);
        printf("\n");*/
        S += sol;
    }
    else
    {
        for (int i = 1; i <= Len; i++)
            if (!b[i] && a[k - 1] < i)
            {
                a[k] = i;
                b[i] = 1;
                sol *= v[i];
                Back(k + 1, Len, NR);
                b[i] = 0;
                sol /= v[i];
            }
    }
}