Cod sursa(job #1383690)

Utilizator Narcys01Ciovnicu Narcis Narcys01 Data 10 martie 2015 15:56:46
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

double a[30], v[30], s, K, p;
int n;

ifstream fin("dezastru.in");
ofstream fout("dezastru.out");

inline void Adun()
{
    int i;
    double x = 1;
    for (i = 1; i <= K; i++)
        x *= v[i];
    s += x;
    p++;
}

inline bool Valid(int k)
{
    int i, nr = -1;
    for (i = 1; i <= n; i++)
        if (v[k] == a[i])
            nr++;
    for (i = 1; i < k; i++)
        if (v[i] == v[k] && nr < 1)
            return false;
        else if (v[i] == v[k])
            nr--;
    return true;
}

inline void Back(int k)
{
    int i;
    for (i = 1; i <= n; i++)
    {
        v[k] = a[i];
        if (Valid(k))
        {
            if (k == n) Adun();
            else Back(k + 1);
        }
    }
}

int main()
{
    int i;
    fin >> n >> K;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    fin.close();
    Back(1);
    fout << s / p << "\n";
    fout.close();
    return 0;
}