Din plictiseala m-am pus sa fac problemele de Judeteana (Informatica) de clasa a 10. Si am intalnit o problema care are o problema. PS: Folosesc c# / c++; - mi-e tot una.
Enunt:
Un fermier deține o fermă de formă dreptunghiulară cu lungimea m metri și lățimea n metri. Respectând principiul rotației culturilor, fermierul și a realizat un plan pentru semănarea culturilor în noul an. Astfel ,el a desenat un dreptunghi pe care l-a împărțit în m * n celule, fiecare corespunzând unui metru pătrat, și a colorat în culori diferite zonele care corespund unor culturi diferite. O cultură poate fi semănată pe mai multe parcele. Două celule care au o latură comună aparțin aceleiași parcele dacă au aceeași culoare (sunt însămânțate cu aceeași cultură). Fermierul are posibilitatea să irige o sigură parcelă și dorește să aleagă parcela cu cea mai mare suprafață.
Rezolvarea mea:
Code: Select all
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int v, m, n, i, j, maxim=0, p, initial=0, f=0, k, mp;
char a[100][100];
ifstream fin ("ferma.in");
fin >> v;
fin >> m >> n;
if (v==1)
{
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
fin >> a[i][j];
}
}
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
mp = 0;
initial = 0;
f = 0;
for (p=j; p<n; p++)
{
if (initial==0)
{
if (a[i][j] == a[i][j+1])
{
initial = p;
mp++;
}
}
if (f==0)
{
if (a[i][j] != a[i][j+1])
{
f = p;
}
}
}
// merge (operatiunea merge)
for (j = initial; j<=f; j++)
{
k = i;
while (true)
{
if (a[k][j] == a[k+1][j])
{
mp++;
}
else
{
break;
}
k++;
}
}
if (mp>maxim)
maxim = mp;
}
}
}
cout << maxim;
return 0;
}
Code: Select all
1
7 8
rmmgggaa
mvvgggaa
mvvgvvvv
vvvrvvvv
vvrrrgga
vvrrrggg
aaaaaaag
Imaginea: