Cod sursa(job #2690696)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 25 decembrie 2020 11:38:26
Problema Hashuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <stdio.h>
#include <fstream>
using namespace std;
int a[ 21 ][ 21 ], v[ 21 ];
int suma[ 21 ], bun[ 21 ];
float rez = 999999999.0;
int n, m, x, y;

int main()
{
    FILE *fin = fopen( "reteta.in", "r" );
    fscanf( fin, "%d %d", &n, &m );
    for( int i = 1; i <= m; i++ ){
        fscanf( fin, "%d %d", &a[ i ][ 0 ], &x );
        for( int j = 1; j <= x; j++ ){
            fscanf( fin, "%d", &y );
            ++a[ i ][ y ];
        }
    }
    for( int i = 1; i <= n; i++ )
        fscanf( fin, "%d", &v[ i ] );

    while( suma[ 0 ] == 0 ){
        x = m;
        while( suma[ x ] == 1 )
            suma[ x-- ] = 0;
        suma[ x ] = 1;
        for( int i = 0; i < 21; i++ )
            bun[ i ] = 0;
        float minn = 0;
        for( int i = 1; i <= m; i++ )
            if( suma[ i ] == 1 ){
                float s = 0;
                for( int j = 1; j <= n; j++ )
                    if( a[ i ][ j ] ){
                        ++bun[ j ];
                        s += v[ j ];
                    }
                if( a[ i ][ 0 ] == 2 )
                    s /= 2.0;
                minn += s;
            }
        int k;
        for( k = 1; k <= n; k++ )
            if( bun[ k ] != 1 )
                k = n + 100;
        if( k < n + 100 )
            if( minn != 0 && rez > minn )
                rez = minn;
    }
    FILE *fout = fopen( "reteta.out", "w" );
    fprintf( fout, "%.1f\n", rez );
    fclose( fout );
    return 0;
}