Cod sursa(job #37505)

Utilizator TheoTheodor Iacomi Theo Data 25 martie 2007 10:37:38
Problema Dezastru Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 0.89 kb
#include<fstream.h>
#include<iomanip.h>
#include<math.h>
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int st[30],valmin,valmax,n,nivel,i,k;
float v[30],fact,p,pr=0;
void init(){
 st[nivel]=valmin-1;}
int succ(){
 if (st[nivel]<valmax) {st[nivel]++; return 1;}
 return 0;}
int valid(){
 for(i=0;i<nivel;i++)
 if(st[i]==st[nivel]) return 0;
 return 1;}
int solutie(){
 return(nivel==n);}
void tipar(){
 int i;p=1;
 for (i=1; i<=k; i++) p=v[st[i]]*p;
 pr=pr+p;}
int main(){
 int as,ev;
// cout<<"n=";cin>>n;
// cout<<"k=";cin>>k;
 f>>n;f>>k;
 for(i=1; i<=n; i++) f>>v[i];
 valmin=1;
 valmax=n;fact=1;
 for(i=1;i<=n;i++)fact=fact*i;
// n=k;
 nivel=1; init();
 while (nivel>0){
  do{as=succ();
     if(as) ev=valid();}while(as&&!ev);
  if(as)
     if(solutie()) tipar(); else{nivel++; init();} else nivel--;
 }
 pr=pr/fact;
 g<<setprecision(6)<<pr<<endl;
 return 0;}