Cod sursa(job #217313)

Utilizator Mishu91Andrei Misarca Mishu91 Data 27 octombrie 2008 22:34:47
Problema Lampa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <cstring>
using namespace std;
#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 n,m,na,nb;

void citire()
{
  fin>>n>>m;
  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<n;i++)
   {
      evol[i][0]=evol[i-1][0]+evol[i-2][0];
      evol[i][1]=evol[i-1][1]+evol[i-2][1];
   }
   na=evol[n-1][0];
   nb=evol[n-1][1];
}

int adevar(int na,int nb)
{
   for (int p=0;p<nb;p++)
      if (a[m-p-1]!=a[m-p-1-na-nb] || a[m-p-1]!=a[m-p-1-na-nb-nb])
        return 0;
   for (int i=0;i<na;i++)
      if (a[m-nb-1]!=a[m-nb-na-nb-nb-1])
        return 0;
   return 1;
}

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

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