Cod sursa(job #674300)

Utilizator tanduraDomnita Dan tandura Data 5 februarie 2012 23:24:18
Problema Text Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<iomanip>
using namespace std;

int l,n,i,j,ok=0,m,k,maxi=-1,v,e,x[20000],x1[20000],imax;
char *p,cuv[21],cuv1[21],s[201],a[20000][21];
struct {char c1; char c2;} lit[20000];
void extragere()
{n=-1;
 ifstream g("text3.in");
 g.getline(s,201);
 l=strlen(s);
 if((s[l-1]!=' ')&&(l!=0))
	{s[l]=' ';
     s[l+1]='\0';}
 while(!g.eof())
      {p=strchr(s,' ');
       while(p)
	        {n++;
			 strncpy(cuv,s,p-s);
			 cuv[p-s]='\0';
			 lit[n].c1=cuv[0];
			 lit[n].c2=cuv[strlen(cuv)-1];
			 strcpy(a[n],cuv);			 
	         strcpy(s,p+1);
			 p=strchr(s,' ');}
		g.getline(s,201);
		l=strlen(s);
	    if((s[l-1]!=' ')&&(l!=0))          
	      {s[l]=' ';                    
          s[l+1]='\0';}                 
	  } 
 g.close();
}

void rezolvare()
{x[n]=1;
	for(k=n-1;k>0;k--)
		{x[k]=1;
		i=k;
		do
			i++;
		while((lit[k].c2!=lit[i].c1)&&(i<n));
		if(lit[k].c2==lit[i].c1) {x[k]=x[i]+1; x1[k]=i;}
		}
	for(i=0;i<=n;i++)
		if(maxi<x[i]) {maxi=x[i];imax=i;}
}
		
		
 

void afisare()
{ofstream t("text3.out");
 t<<n+1<<"\n";
 t<<n-maxi+1<<"\n";
 j=imax;
 while((j<=n)&&(j!=0))
	{t<<a[j]<<"\n";
	 j=x1[j];}
 t.close();
}

int main()
{int t1,t2;
t1=clock();
extragere();
rezolvare();
afisare();
t2=clock();
cout<<setiosflags(ios::showpoint)<<setprecision(20)<<(double)(t2-t1)/CLOCKS_PER_SEC;
return 0;}