Pagini recente » Monitorul de evaluare | Profil DenisONIc | Euro | Gruparea testelor | Cod sursa (job #2003312)
#include <iomanip>
#include <fstream>
using namespace std;
double sum = 0;
double v[30];
int n, m, st[30];
bool viz[30];
int nFact = 0;
void Read()
{
ifstream f("dezastru.in");
f >> n >> m;
for (int i = 1;i <= n;i++)
f >> v[i];
f.close();
}
//void Calculate()
//{
// nFact = 1;
// for (int i = 1;i <= n;i++)
// nFact *= i;
//}
void Solution()
{
double s = 1;
for (int i = 1;i <= m;i++)
s *= v[st[i]];
sum += s;
}
void Back(int k)
{
if (k > m)
{
Solution();
nFact++;
/*for (int i = 1;i <= m;i++)
cout << v[st[i]] << " ";
cout << "\n";*/
return;
}
//nu sunt sigur ca sa face cu combinari, nu ar fi logic
//asta ar insemna sa luam o singura data doua atacuri consecutive exemplu 1 2 3, 2 1 3
//si trebuie luate de 2 ori
for (int i = st[k - 1] + 1;i <= n;i++)
{
st[k] = i;
Back(k + 1);
}
}
void Write()
{
ofstream g("dezastru.out");
g << setprecision(6) << sum / nFact << "\n";
g.close();
}
int main()
{
Read();
Back(1);
Write();
return 0;
}