Cod sursa(job #1325963)

Utilizator ElViolatoreNimei Altul ElViolatore Data 24 ianuarie 2015 15:47:54
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("dezastru.in");
ofstream g("dezastru.out");

int v[26],n,as,se,atacuri,k,nr;
float produs, suma,valoare [26];

void adaugare_suma ();

void citire ()
{
    int i;
    f>>n>>atacuri;
    for (i=1;i<=n;i++)
        f>>valoare [i];
}

void init ()
{
    v[k]=0;
}

int verificare ()
{
    if (k==atacuri)
        return 1; return 0;
}

int validare1 ()
{
    if (v[k]<n)
    {
        v[k] ++ ;
        return 1;
    }
    return 0;
}

int validare2 ()
{
    int i;
    for (i=1;i<k;i++)
        if (v[i] == v[k])
        return 0;
    return 1;
}

void backtracking()
{
    k=1;
    init ();
    while (k>0)
    {
        as=1;
        se=0;
        while (as && !se)
        {
            as=validare1 ();
            if (as)
                se =validare2 ();
        }
        if (as)
            if (verificare ())
            adaugare_suma ();
        else
        {
            k++;
            init ();
        }
        else
            k--;
    }
}

void adaugare_suma ()
{
    nr++;
    int i;
    float produs =1;
    for (i=1;i<=k;i++)
        produs *= valoare [v[i]];
    suma += produs ;
}


int main()
{
    citire();
    backtracking ();
    g << (float) suma / nr;
    return 0;
}