Cod sursa(job #2154)

Utilizator crusRus Cristian crus Data 16 decembrie 2006 09:22:15
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <stdio.h>
#include <string.h> 
#define input "bilete.in"
#define output "bilete.out"
#define nmax 101
char c[nmax],st[nmax];
struct sir {char s[nmax]; int niv,lung;};
sir m1[nmax*nmax],m2[nmax*nmax];
int sol,niv,min,i,j,g,vm,k;
void read()
{
	FILE *fin;
	fin=fopen(input,"r");
	fscanf(fin,"%s",c);
	fclose(fin);
}
/*void solve1()
{	
	niv=0;
	max=0;
	vm=strlen(c);
	for (i=0;i<vm;i++)
		{		 
		 g=0;
		 for (j=1;j<=niv;j++)
			 if (st[j]==c[i]) {g=j;break;}
		 if (g)
			 niv=g;
		 else {niv=niv+1; st[niv]=c[i]; max++;}		
		}
}*/
void write()
{
	FILE *fout;
	fout=fopen(output,"w");
	fprintf(fout,"%ld",min);
	fclose(fout);
}
inline void copiaza(char sursa[], char dest[], int cate)
{
	int i;
	memset(dest,0,sizeof(dest));
	for (i=1;i<=cate;i++)
		dest[i]=sursa[i];

}
void solve()
{
    int n1,n2;
	n1=1; n2=0;
	m1[1].s[1]=c[0];
	m1[1].niv=1;
	m1[1].lung=1;
	for (i=1;i<strlen(c);i++)
		{
		for (j=1;j<=n1;j++)
			{
			for (k=1;k<=m1[j].lung;k++) 
				if (m1[j].s[k]==c[i])
					{n2++;
					 copiaza(m1[j].s,m2[n2].s,k);
					 m2[n2].niv=m1[j].niv;					 
					 m2[n2].lung=k;
					}	 
			if (m1[j].s[m1[j].lung]!=c[i])
				{n2++;
					 copiaza(m1[j].s,m2[n2].s,m1[j].lung);
					 m2[n2].niv=m1[j].niv+1;					 
					 m2[n2].lung=m1[j].lung+1;
					 m2[n2].s[m2[n2].lung]=c[i];
				}	 					
			}
		 n1=n2;
		 memcpy(m1,m2,sizeof(m2));
		 n2=0;
		}
	min=200;
	for (i=1;i<=n1;i++)
		if (m1[i].niv<min) min=m1[i].niv;
}
int main()
{
	read();
	solve();
	write();
	return 0;
}