Cod sursa(job #897231)

Utilizator UgleaEduFMI - Edward UgleaEdu Data 27 februarie 2013 19:28:54
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int n, ev, as, st[30], i, k, l;
double v[30], p, s = 1, suma = 0 ;
int fact (int n)
{
 int prod = 1;
 while(n)
  prod *= n--;
  return prod;
}
void init()
{ st[k] = 0; }
int succesor()
{
 if( st[k] < n )
 {
  st[k]++;
  return 1;
 }
 return 0;
}
int valid()
{
 for( i = 1; i < k; i++ )
  if( st[i] == st[k] )
   return 0;

  return 1;
}
int solutie ()
{ return k == n; }
void calc()
{
 p = 1;
 s = 0;
 for( i = 1; i <= l; i++ )
  p *= v[ st[i] ] ;
 s += p;
  suma += s/fact(n);
}
void back()
{
 k = 1;
 init();
 while( k > 0 )
 {
  as = 1;
  ev = 0;
  while( as && !ev )
  {
   as = succesor();
   if( as )
    ev = valid();
  }
  if( as )
    if( solutie() )
     calc();
    else
    { k++; init(); }
  else
    k--;
 }
}

int main()
{
 f>>n>>l;
 for( i = 1; i <= n; i++)
  f>>v[i];
 st[k] = 0;
 back();
 g<<suma;

 return 0;
}