Cod sursa(job #491561)

Utilizator nbibestNeagu Bogdan Ioan nbibest Data 11 octombrie 2010 19:36:49
Problema Dezastru Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <iostream>
#include<stdio.h>

int i,j,k,n,nn,p,kk;
float g;
float v[30];
int w[30];

using namespace std;

double back(int i){

    int p;
    float x;
    x=1;

    if ((kk==k))
        {
            /*x=x*v[p];
            g=g+x;*/

            int y;
            x=1;
            for (y=1;y<=k;y++)
            {
                x=x*v[w[y]];
                if ((w[y-1]==w[y])or(w[y]<w[y-1]))
                x=0;
                //printf("%d ",w[y]);
            }
            //printf("%f \n",x);
            if (x!=0) nn++;
            g=g+x;
        }
        else
    if (i+k-1<=n){
    for (p=i;(p<=n);p++)
    {
        kk++;

        w[kk]=p;

        if ((kk==k))
        {
            /*x=x*v[p];
            g=g+x;*/

            int y;
            x=1;
            for (y=1;y<=k;y++)
            {
                x=x*v[w[y]];
                if ((w[y-1]==w[y])or(w[y]<w[y-1]))
                x=0;
                //printf("%d ",w[y]);
            }
            //printf("%f \n",x);
            if (x!=0) nn++;
            g=g+x;
        }

        //printf("%d %d %d %f %f \n",i,p,kk,g,x);
        if (i+k<=n)
        back(i+1);

        kk--;


    }
    }

    //return 0;
}

int main(void)
{

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

    scanf("%d%d\n",&n,&k);

    for (i=1;i<=n;i++)
    {
        scanf("%f",&v[i]);
        //printf("%f\n",v[i]);
    }

    g=0;
    back(1);

    float ss;
    ss=g/nn;

    //printf("%f %d\n",g,nn);
    printf("%.6f ",ss);

    return 0;
}