Rezolvare completă PbInfo #2187 expand

None

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema expand:

//100 puncte EmCerchez
#include <fstream>
#include <cstring>
#include <cassert>
#define NMAX 16
#define LGS 16
#define LGMAX 15000000

using namespace std;

ifstream fin("expand.in");
ofstream fout("expand.out");

int N, start, lgs;
char G[26][NMAX][LGS];
int lg[26];
char  s[LGS];
struct element {short int nr;
                char s[LGS];};
element C[LGMAX];

void citire();
int BFS(int start);

int main()
{
    citire();
    fout<<BFS(start)<<'\n';
    fout.close();
    return 0;
}

void citire()
{char L, c;
 int i, j, lllg;
 fin>>L>>s>>N;
 assert('a'<=L && L<='z');

 lgs=strlen(s);
 assert(lgs<=15);
 assert(N<=15);
 start=L-'a';
 for (i=0; i<N; i++)
      {
       fin>>c;
       assert('a'<=c && c<='z');
       fin>>G[c-'a'][lg[c-'a']];
       lllg=strlen(G[c-'a'][lg[c-'a']]);
       assert(lllg==2 || lllg==3);
       lg[c-'a']++;
      }
}

int BFS(int start)
{
int inc=0, sf=0, i, j, k, lgx,t,z;
element x;
C[0].nr=0; C[0].s[0]=start+'a'; C[0].s[1]=0;
while (inc<=sf)
      {
        x=C[inc++];
        lgx=strlen(x.s);
        for (i=0; i<lgx; i++)
             {
               j=x.s[i]-'a';
               for (k=0; k<lg[j]; k++)
                   if (lgx-1+strlen(G[j][k])<=lgs)
                        {
                          ++sf; if (sf==LGMAX) return -2;
                          C[sf].nr=x.nr+1;
                          for (t=0; t<i; t++) C[sf].s[t]=x.s[t];
                          for (z=0; G[j][k][z]; z++) C[sf].s[t+z]=G[j][k][z];
                          for (t=i+1; x.s[t]; t++) C[sf].s[t+z-1]=x.s[t];
                          C[sf].s[t+z-1]=0;
                          if (strcmp(C[sf].s,s)==0) return C[sf].nr;
                        }
                }
      }
   return -1;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2187 expand

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2187 expand de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!