Pagini recente » Cod sursa (job #1949407) | Cod sursa (job #955534) | Cod sursa (job #2245460) | Cod sursa (job #687384) | Cod sursa (job #249509)
Cod sursa(job #249509)
#include <stdio.h>
#define Nmax 101
inline int inf(float x) { if ((int)x == x) return (int)x; return (int)x; }
float v[Nmax][Nmax], L[Nmax], C[Nmax];
int i, j, k, N, M, l[Nmax], c[Nmax], uz[Nmax][Nmax], loc, max, dist;
int main()
{
for (freopen("matrice2.in", "r", stdin), freopen("matrice2.out", "w", stdout), scanf("%d %d\n", &N, &M), i = 1; i<=N; ++i)
for (j = 1; j<=M; ++j)
{
scanf("%f ", &v[i][j]);
L[i] += v[i][j];
C[j] += v[i][j];
}
for (i = 1; i<=N; ++i)
for (j = 1; j<=M; ++j)
{
if ( (int)v[i][j] == v[i][j] ) ++uz[i][j];
l[i] += inf(v[i][j]);
c[j] += inf(v[i][j]);
}
for (j = 1; j<=M; ++j)
{
for (dist = inf(C[j]) - c[j]; dist; --dist)
{
loc = 0; max = -1;
for (i = 1; i<=N; ++i)
if (!uz[i][j] && inf(L[i]) - l[i] > max)
{
if (inf(L[i]) - l[i] == 0 && (int)L[i] == L[i]) continue;
max = inf(L[i]) - l[i];
loc = i;
}
++uz[loc][j];
++l[loc];
++c[j];
}
}
for (i = 1; i<=N; ++i)
if (inf(L[i]) > l[i])
{
dist = inf(L[i]) - l[i];
for (j = 1; j<=M; ++j)
if (inf(C[j]) == c[j] && !uz[i][j] && (int)C[j] != C[j])
{
++uz[i][j];
++c[j];
if (!(--dist)) break;
}
}
for (i = 1; i<=N; ++i)
{
for (j = 1; j<=M; ++j)
{
if ( (int)v[i][j] == v[i][j] ) --uz[i][j];
printf("%d ", inf(v[i][j]) + uz[i][j]);
}
printf("\n");
}
return 0;
}