Cod sursa(job #899267)

Utilizator ndranrawPetrisor Andrei ndranraw Data 28 februarie 2013 13:39:06
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int n,k,i,j,m,x,sol[30],as,ev;
double a[26],s,s1;
void init()
{sol[x]=0;
}
int succesor()
{
    if(sol[x]<n)
    {
        sol[x]=sol[x]+1;return 1;
       } else return 0;
    }
int valid()
{
    for(int p=1;p<x;p++)
    if(sol[x]==sol[p]) return 0;
    return 1;
}
int solutie()
{return x==n;
}
void tipar ()
{s1=1;
    for(int p=1;p<=k;p++)
s1*=a[sol[p]];m++;
s+=s1;
}
void bkt()
{x=1;
init();
while(x>0)
{as=1;ev=0;
while(as&&!ev)
{as=succesor();
if(as) ev=valid();}
if(as)
if(solutie()) tipar();
else {x++;init();}
else x--;
}
}
int main()
{f>>n>>k;
for(i=1;i<=n;i++)
f>>a[i];
bkt();
g.precision(6);
g<<s/m;
f.close();
g.close();
}