Salutare

Aici vom discuta pe tema IT care va include : c++, visual basic, php, html, css si multe altele; veti gasi si diverse stiri.

Moderators: Moderator ajutator, Moderator

skill +2
skill +2
Status: Offline
Posts: 112
Registered for: 10 years 4 months
10
Status: import org.bukkit.command.*;
Cont Premium: ChrystianSandu
Location: 127.0.0.1

Salutare Post by ChrystianSandu »

Salutare,
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;
}
Ce se afla in fisierul ferma.in:

Code: Select all

1
7 8
rmmgggaa
mvvgggaa
mvvgvvvv
vvvrvvvv
vvrrrgga
vvrrrggg
aaaaaaag

Cu acel 1 este o alta poveste iar 7 si 8 sunt marimea dreptunghiului (gradina).

Imaginea:
Image
full skill
full skill
Status: Offline
Posts: 1216
Registered for: 10 years 8 months
10
Cont Premium: vScorpio
Location: București

Re: Salutare Post by Scorpio »

Te-aș ajuta cu mare plăcere dac-aș înțelege și aș știi C++...
Din păcate abia trec a 7-a și nu pot încă rezolva probleme de a 10-a. :))
Poate te ajută WoophRadu, el a făcut ceva C++ parcă.
We are anonymous.
We are legion.
We do not forgive.
We do not forget.
Expect us!

Image
Spoiler | Afiseaza
[img]http://www.speedtest.net/result/3627915067.png[/img]
skill +2
skill +2
Status: Offline
Posts: 112
Registered for: 10 years 4 months
10
Status: import org.bukkit.command.*;
Cont Premium: ChrystianSandu
Location: 127.0.0.1

Re: Salutare Post by ChrystianSandu »

Chiar nimeni nimic? Am gasit rezolvarea, se mai compone un vector si pe urma se analizeaza fiecare element si este inlocuit cu 0.
skill +2
skill +2
User avatar
Status: Offline
Posts: 104
Registered for: 10 years 5 months
10
Status: Fost Bukkit Leader
Fost Moderator
Cont Premium: WallE256
Contact:

Re: Salutare Post by WallE256 »

Poate nu stii, C++ este limbajul meu principal, nu Java. O sa implementez o solutie si revin cu edit.

EDIT: Iti spun cum se face pe TS... #Lene
Retras.
[ytsig]raddudj[/ytsig]
skill +2
skill +2
Status: Offline
Posts: 112
Registered for: 10 years 4 months
10
Status: import org.bukkit.command.*;
Cont Premium: ChrystianSandu
Location: 127.0.0.1

Re: Salutare Post by ChrystianSandu »

Cucout mai spus, am gasit rezolvarea. Acum nu mai sunt acasa (poveste lunga) si nu o mai fac odata, deci, am gasit si a doua metoda.
Un patrat are doar 4 laturi, metoda II presupune asezarea centrului (unde se afla cordonata initiala / coordonatele) si pe urma rearanjarea patratelor. (o metoda care are un tip mare de executie si multe bug-uri).
Metoda I este cea mai rapida (la care m-am gandit):
Se mai i-a un vector v[100][100], pe urma o sa punem elementele din a in vectorul v[100][100] (cu 2 for-uri se rezolva si in loc de cifrele care trebuie puse o sa punem '0'), dupa care o sa incepem de la un sigur punct (x[0][0]) si o sa facem asa, iar variabila r o sa fie litera lui a[n][m]:

Code: Select all

fin >> s; 
fin>> m >> n;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
fin » a[i][j];
}
maxi=0;
}
if (s==1)
{
for (i=0; i< m-1; i++)
{
for (j=0; j< n-1; j++)
{
k=0;
x=i; z=j;
for (x=0; x< m-1; x++)
{
for (z=0 ; z< n-1; z++)
{
if (v[x][z] == a[i][j])
{
if(v[x+1][z] == '0')
{
v[x][z] = '0';
k++;
}
if (v[x][z+1] == 0)
{
v[x][z] ='0';
k++;
}
}
// analog cu for(z=n-1; z>0; z--)
}
If (k> maxi)
Maxi=k;
}
}
fout << maxi;
}
}
Apropo, pune rezolvarea ta aici, acum nu sunt in localitate si tot cade net-ul. Apropo, daca stii un singur limbaj le stii pe toate (aceeasi logica dar alta notatie), si eu sunt un java starter, eu fac doar C/C++, launcherul ala era scris in c#. Si da, doar sa stii stiu C-ul bine, dar uneori nu gasesc logica problemelor asa rapid. Metoda mea are un tip de execuție mediu. (0.1 secunde)

PS: Pune ca vreau sa vad si metoda ta.
Post a new topic Post a reply

Return to “Discutii IT”