Cod sursa(job #156316)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 12 martie 2008 14:35:59
Problema Lampa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream.h>
#include <string.h>
#define MAX 3040010
ifstream fin ("lampa.in");
ofstream fout ("lampa.out");

char a[MAX];
char gen1[30],gen2[30],final[30];
int evol[30][2];
int nr,Suma,nra,nrb;

void citire()
{
  fin>>nr>>Suma;
  fin.getline(a,MAX);
  fin.getline(a,MAX);
  fin.close();
}

void calcul()
{
   evol[0][0]=1;
   evol[1][1]=1;
   for (int i=2;i<nr;i++)
   {
      evol[i][0]=evol[i-1][0]+evol[i-2][0];
      evol[i][1]=evol[i-1][1]+evol[i-2][1];
   }
   nra=evol[nr-1][0];
   nrb=evol[nr-1][1];
}

int adevar(int nra,int nrb)
{
  int ok=0;
   for (int p=0;p<nrb;p++)
      if (a[Suma-p-1]==a[Suma-p-1-nra-nrb] && a[Suma-p-1]==a[Suma-p-1-nra-nrb-nrb])
	 ok=1;
      else
	 return 0;
   for (int i=0;i<nra;i++)
      if (a[Suma-nrb-1]==a[Suma-nrb-nra-nrb-nrb-1])
	 ok=1;
      else
	return 0;
   return 1;
}

void aflare()
{
  double lga=0,lgb=0;
   for (lgb=Suma/nrb;lgb>0;lgb--)
   {
      if ((int)(Suma-lgb*nrb)/nra==(double)(Suma-lgb*nrb)/nra)
	 if (adevar((Suma-lgb*nrb)/nra,lgb))
	 {
	    for (int i=Suma-lgb-((Suma-lgb*nrb)/nra);i<Suma-lgb;i++)
	       fout<<a[i];
	    fout<<"\n";
	    for (int j=Suma-lgb;j<Suma;j++)
	      fout<<a[j];
	    fout<<"\n";
	    return;
	 }
   }
   fout<<"0\n";
}

int main ()
{
  citire();
  calcul();
  aflare();
  return 0;
}