Pagini recente » Cod sursa (job #2246960) | Cod sursa (job #400521) | Cod sursa (job #1775016) | Cod sursa (job #1735414) | Cod sursa (job #947969)
Cod sursa(job #947969)
/// Craciun Catalin
/// Backtracking iterativ
/// Dezastru
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int n,l,k;
int C[30];
int cate_permutari=0;
long double P[100];
long double V[100];
int c=1;
void Calcul(){
for (int i=1;i<=l;i++)
P[c]*=V[C[i]];
c++;
cate_permutari++;
}
bool Posibil(int p){
bool ok=1;
for (int i=1;i<p && ok;i++)
if (C[p]==C[i])
ok=0;
return ok;
}
int main(){
bool ok;
for (int i=1;i<=100;i++)
P[i]=1;
f>>n>>l;
for (int i=1;i<=n;i++)
f>>V[i];
f.close();
k=1;
C[k]=0;
while (k>0){
ok=0;
while (!ok && C[k]<n){
C[k]++;
ok=Posibil(k);
}
if (!ok)
k--;
else{
if (k==l)
Calcul();
else{
k++;
C[k]=0;
}
}
}
long double p=0;
for (int i=1;i<c;i++){
p=p+(P[i]/cate_permutari);
}
g<<fixed<<setprecision(6)<<p;
return 0;
}