Pagini recente » Cod sursa (job #1777830) | Cod sursa (job #1490684) | Cod sursa (job #821337) | 312 | Cod sursa (job #2154)
Cod sursa(job #2154)
#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;
}