Cod sursa(job #1325403)

Utilizator LegionHagiu Stefan Legion Data 23 ianuarie 2015 21:42:32
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
using namespace std;
short int permutari[26];
int n,k,total;
float d,dez[26];
void rez(int ajuns,int numar);
void continua(int ajuns,int numar)
{
    register int i;
    static short int verific[26];
    bool inceput=0;
    if (inceput=0)
    {

        inceput=1;
        for (i=1;i<=25;i++)
        {
            verific[i]=0;
        }
    }
    verific[permutari[numar-1]]=1;
    for (i=ajuns+1;i<=n;i++)
    {
        if (verific[i]==0)
        {
            permutari[numar]=i;
            rez(i,numar+1);
        }
    }
    verific[permutari[numar-1]]=0;
}
void verificanumar()
{
    int i;
    float ac=1;
    total++;
    for (i=1;i<=k;i++)
    {
        ac*=dez[permutari[i]];
    }
    d+=ac;
}
void rez(int ajuns,int numar)
{
    if (ajuns<n&&numar<=k&&n-ajuns>k-numar)
    {
        continua(ajuns,numar);
    }
    else if (numar==k+1)
    {
        verificanumar();
    }
}
int main()
{
    ifstream in("dezastru.in");
    ofstream out("dezastru.out");
    int i,j;
    in>>n;
    in>>k;
    for (i=1;i<=n;i++)
    {
        in>>dez[i];
    }
    rez(0,1);
    d/=total;
    out<<d;
    out.flush();
    out.close();
    return 0;
}