Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <stdio.h>

char nu_zn[30], zn_nu[101], linia[2001], tab[2001][2001];
long rzedy, kolumny, podl_rz[2001][31], podl_kol[2001][31];
long ruchy[5000][4], licz_ruchy=0, nr_koloru;



int main()
{
for (int ii=1; ii<=100; ii++)   zn_nu[ii]=0;
for (int ii=0; ii<=30; ii++)   nu_zn[ii]=0;
for (int ii=1; ii<=2000; ii++)   for (int jj=0; jj<=30; jj++)   { podl_rz[ii][jj]=0;   podl_kol[ii][jj]=0; }
scanf("%ld",&rzedy);
scanf("%ld",&kolumny);
for (int ii=1; ii<=rzedy; ii++)
	{
	 scanf("%s",linia);
	 for (int jj=0; jj<kolumny; jj++)
	 	{
	 	 if(zn_nu[linia[jj]] == 0)
	 	 	{ //Trzeba doda� ten znak
	 	 	 nu_zn[0]++;
	 	 	 zn_nu[linia[jj]] = nu_zn[0];
	 	 	 nu_zn[nu_zn[0]] = linia[jj];
	 	 	}
	 	 tab[ii][jj+1] = zn_nu[linia[jj]];
	 	 podl_rz[ii][ zn_nu[linia[jj]] ]++;
	 	 podl_kol[jj+1][ zn_nu[linia[jj]] ]++;
	 	}
	}

// Teraz licznik r�nych kolor�w dla ka�dej kolumny i wiersza:
for (int ii=1; ii<=rzedy; ii++)   for (int jj=1; jj<=30; jj++)   if(podl_rz[ii][jj]>0)   podl_rz[ii][0]++;
for (int ii=1; ii<=kolumny; ii++)   for(int jj=1;jj<=30; jj++)   if(podl_kol[ii][jj]>0)   podl_kol[ii][0]++;

podl_rz[0][0]=0;
for (int ii=1; ii<=rzedy; ii++)   podl_rz[0][0] += podl_rz[ii][0];
podl_kol[0][0]=0;
for (int ii=1; ii<=kolumny; ii++)   podl_kol[0][0] += podl_kol[ii][0];

/*
for (int ii=1; ii<=rzedy; ii++) {
	for (int jj=1; jj<=kolumny; jj++) printf("%d",tab[ii][jj]);
	printf("\n"); }
printf("\nPodliczanie rzedow (wsz=%ld):\n",podl_rz[0][0]);
for (int ii=1; ii<=rzedy; ii++) {
	printf("rzad %d: ",ii);
	for (int jj=0; jj<=nu_zn[0]; jj++)   printf("%ld ", podl_rz[ii][jj]);
	printf("\n"); }
printf("\nPodliczanie kolumn (wsz=%ld):\n",podl_kol[0][0]);
for (int ii=1; ii<=kolumny; ii++) {
	printf("kolumna %d: ",ii);
	for (int jj=0; jj<=nu_zn[0]; jj++)   printf("%ld ", podl_kol[ii][jj]);
	printf("\n"); }
*/

while ((podl_rz[0][0]>0)&&(podl_kol[0][0]>0))
	{
	 // Na zmian� przegl�dam wszystkie rz�dy oraz kolumny w poszukiwaniu takich, w kt�rych jest tylko jeden kolor.
	 // Je�li taki znajd�, to wykonuj� ten ruch (p�niej wynik zapisz� w odwrotnej kolejno�ci);
	 // Trzeba wyzerowa� tabel� z obrazkiem. Z ka�dym zerowanym elementem zmniejsza� te� podliczenia, aktualizuj�c przy tym sum� podlicze�.
	 for (int rz = 1; rz<= rzedy; rz++)   if (podl_rz[rz][0] == 1)
	 	{ // Wykonuj� ten ruch:
	 	 licz_ruchy++;
	 	 ruchy[licz_ruchy][1] = 1; // 1 - rz�d;   2 - kolumna
	 	 ruchy[licz_ruchy][2] = rz;  // numer rz�du
	 	 for (int ii=1; ii<=30; ii++)   if (podl_rz[rz][ii] > 0)   { nr_koloru=ii;  break; }
	 	 ruchy[licz_ruchy][3] = nr_koloru;
	 	 
	 	 // Kasuj� ten rz�d w podliczeniu
	 	 podl_rz[rz][0] = 0;
	 	 podl_rz[0][0]--;
	 	 // Po kolei id� po tablicy i je�li jest ten element, to odejmuj� z danej kolumny
	 	 for (int jj=1; jj<=kolumny; jj++)   if (tab[rz][jj] > 0)
	 	 	{ // Znalaz�em element w tablicy, kt�ry trzeba odj��
	 	 	 podl_kol[jj][tab[rz][jj]]--;
	 	 	 if (podl_kol[jj][tab[rz][jj]]==0)
	 	 	 	{ // Wyzerowa�o si�, wi�c trzeba zaktualizowa� podliczenia
	 	 	 	 podl_kol[jj][0]--;
	 	 	 	 podl_kol[0][0]--;
	 	 	 	}
	 	 	 // Wyzerowanie tego elementu:
	 	 	 tab[rz][jj] = 0;
	 	 	}
	 	}
	 for (int kol=1; kol<=kolumny; kol++)   if (podl_kol[kol][0]==1)
	 	{ //Wykonuj� ruch:
	 	 licz_ruchy++;
	 	 ruchy[licz_ruchy][1] = 2; // 1-rz�d;  2-kolumna
	 	 ruchy[licz_ruchy][2] = kol; // numer kolumny
	 	 for (int ii=1; ii<=30; ii++)  if (podl_kol[kol][ii] >0)   { nr_koloru=ii; break; }
	 	 ruchy[licz_ruchy][3] = nr_koloru;
	 	 // Kasuj� t� kolumn� w podliczeniu
	 	 podl_kol[kol][0]=0;
	 	 podl_kol[0][0]--;
	 	 // Po kolei id� po tablicy i je�li jest ten element, to odejmuj� z danego wiersza
	 	 for (int ii=1; ii<=rzedy; ii++)   if (tab[ii][kol] > 0)
	 	 	{ // Znalaz�em element do odj�cia
	 	 	 podl_rz[ii][tab[ii][kol]]--;
	 	 	 if (podl_rz[ii][tab[ii][kol]]==0)
	 	 	 	{ // Wyzerowa�o si�, wi�c aktualizuj� podliczenia
	 	 	 	 podl_rz[ii][0]--;
	 	 	 	 podl_rz[0][0]--;
	 	 	 	}
	 	 	 // Wyzerowanie tego elementu w tablicy:
	 	 	 tab[ii][kol] = 0;
	 	 	}
		}
	}

// No i pozosta�o wypisanie wyniku, ale w odwrotnej kolejno�ci:
printf("%ld\n",licz_ruchy);
for (int ii=licz_ruchy; ii>=1; ii--)
	{
	 if (ruchy[ii][1]==1)   printf("R ");
	 else   printf("K ");
	 printf("%ld ",ruchy[ii][2]);
	 printf("%c\n",nu_zn[ruchy[ii][3]]);
	}





return 0;
}