título
Significado de las preguntas:
Dada una matriz de n * m, los metros de la matriz en algunos lugares. Un total de k le pollitos, y ahora es necesario asignar sus lugares. La solicitud no puede ser asignado a dos polluelos con una rejilla, cada rejilla se debe asignar y asignado a una posición Unicom pájaro, de tal manera que la diferencia entre m y más comen arroz menos reduce al mínimo.
análisis:
Para minimizar esta diferencia, es evidente que los metros promedio de puntuación, también se distribuyen uniformemente resto, hasta el 1 de diferencia. Debido a la Unicom, el tiempo asignado a serpentina poligonal, las filas impares de secuencia positiva, revertir filas pares. El resto es para simular el proceso muy bien.
#include <iostream>
using namespace std;
char a[105][105];
char res[105][105];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while( t-- )
{
int n,m,k;
cin >> n >> m >> k;
int num = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
if( a[i][j] == 'R' ) num ++;
}
}
int z1 = num / k;
int z2 = num % k;
int index = 1;
int temp;
if( z2 != 0 ) temp = z1 + 1;
else temp = z1;
char ans = 'a';
for (int i = 1; i <= n; i++)
{
if( i & 1 )
{
for (int j = 1; j <= m; j++)
{
if( a[i][j] == 'R' && temp == 0 )
{
index ++;
if( index > z2 ) temp = z1;
else temp = z1 + 1;
if( ans == 'z' ) ans = 'A';
else if( ans == 'Z' ) ans = '0';
else ans ++;
}
res[i][j] = ans;
if( a[i][j] == 'R' ) temp --;
}
}else
{
for (int j = m; j >= 1; j--)
{
if( a[i][j] == 'R' && temp == 0 )
{
index ++;
if( index > z2 ) temp = z1;
else temp = z1 + 1;
if( ans == 'z' ) ans = 'A';
else if( ans == 'Z' ) ans = '0';
else ans ++;
}
res[i][j] = ans;
if( a[i][j] == 'R' ) temp --;
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cout << res[i][j];
}
cout << '\n';
}
}
return 0;
}