Pagini recente » Cod sursa (job #114843) | Cod sursa (job #2969251) | Cod sursa (job #414439) | Cod sursa (job #3265744) | Cod sursa (job #674300)
Cod sursa(job #674300)
#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;}