Cod sursa(job #1709740)

Utilizator UPTReturnUPT Return UPTReturn Data 28 mai 2016 13:42:26
Problema Sate2 Scor 0
Compilator c Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 2.77 kb
#include <stdio.h>
#include <stdlib.h>

FILE *f,*g;
int vector[3001], contorVector; //tine minte locuitorii fiecarui catum
int solutie[4], contorSolutie;

void init(int n, int k){
    int i, j;
    for(i = 0; i < n; i++)
        vector[i] = 0;
    for(j = 0; j < k; j++)
        solutie[j] = 0;
}

/*void quicksort(int s, int d){
    int aux;
    if (s >= d)
        return;
    if(s < d)
    {
        int m = vector[(s+d)/2];
        int i = s, j = d;
        while(i < j)
        {
            while(vector[i] <= m) i++;
            while(vector[j] > m) j--;
            if(i < j)
            {
                aux = vector[i];
                vector[i] = vector[j];
                vector[j] = aux;
            }
        }
        quicksort(s, i-1);
        quicksort(i+1, d);
        printf("s ");

    }
}*/

void bsort(int n){
    int i, j, aux;
    for(i = 0; i < n-1; i++)
        for(j = 0; j < n; j++)
        if(vector[j] < vector[j+1])
        {
            aux = vector[j];
            vector[j] = vector[j+1];
            vector[j+1] = aux;
        }
}

void functie(int n, int m, int k){
    int i = 0, j, ok = 1, aux, x;
    contorSolutie = 0;
    bsort(n);
    ok = 0;
    while(i < n){
        ok = 0;
        for(j = ok; j < k; j++)
            if(solutie[j] + vector[i]<= m/k){
                solutie[j] += vector[i];
                ok = j;
                break;
            }
        if(ok == k)
            ok = 0;
        i++;
    }

    for(i = 0; i < k; i++){
        if(solutie[i] != m/k){
            ok = 0;
        }
    }


    if(ok)
        fprintf(g,"DA\n");
    else
        fprintf(g,"NU\n");
}

int main()
{
    int t, n, m, k, i, j, x =1;
    f = fopen("sate2.in", "r");
    g = fopen("sate2.out", "w");

    if(!f || !g)
    {
        printf("\nNu merg fisierele");
        return -1;
    }

    if(fscanf(f,"%d",&t)!=1)
    {
        printf("\nNu avem date in fisier");
        return -1;
    }

    for(i = 0; i < t; i++)
    {
        contorSolutie = 0;
        contorVector = 0;
        x = 1;
        if(fscanf(f,"%d %d %d",&n,&m,&k)==3){
            init(n, k);
            for(j = 0; j < n; j++)
            {
                if(fscanf(f, "%d", &vector[contorVector++])!=1){
                    printf("\nNu s-a reusit citirea numarului de locuitori din fiecare catun.");
                    x = 0;
                }
            }
            if( x == 1)
                functie(n, m, k);
            else
            {
                printf("\nNu s-a reusit citirea numarului de locuitori din fiecare catun.");
            }
        }
        else
            printf("\nNu s-a reusit citirea N, M, K.");

    }

    fclose(f);
    fclose(g);
    return 0;
}