Pagini recente » Cod sursa (job #1039526) | Cod sursa (job #3174815) | Cod sursa (job #1641777) | Cod sursa (job #2389592) | Cod sursa (job #1709962)
#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 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, l, j, okk = 0, ok = 1;
contorSolutie = 0;
bsort(n);
ok = 0;
while(i < n && okk < k){
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;
for(l = 0; l < k; l++){
if(solutie[i] == m/k){
okk++;
}
}
i++;
}
if(okk == k && i == n-1)
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;
}