Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- FILE* in=fopen("codul.in","r");
- FILE* out=fopen("codul.out","w");
- const int Q=201;
- char a[Q],b[Q];
- int sa,sb;
- struct tipe{
- unsigned char size;
- unsigned char x,y;
- void operator = (const tipe &aux)
- {
- size=aux.size;
- x=aux.x;
- y=aux.y;
- }
- } v[Q][Q];
- //int q1[Q],q2[Q];
- void modifica(int x1, int y1, int x2,int y2)
- {
- int x1v=x1,y1v=y1,x2v=x2,y2v=y2,aux;
- if(v[x2][y2].size>v[x1][y1].size)
- {
- v[x1][y1]=v[x2][y2];
- return;
- }
- // q1[0]=0;
- // q2[0]=0;
- bool ult=0;
- if(v[x2][y2].size == v[x1][y1].size)
- {
- while( x2>0 && x1>0 && y1>0 && y2>0 )
- {
- if(a[ v[x2][y2].x +1 ]> a[ v[x1][y1].x +1 ])
- {
- //v[x1v][y1v]=v[x2v][y2v];
- //return;
- ult=1;
- }
- if(a[ v[x2][y2].x +1 ] < a[ v[x1][y1].x +1 ])
- ult=0;
- // q1[++q1[0]]=a[ v[x1][y1].x +1 ];
- // q2[++q2[0]]=a[ v[x2][y2].x +1 ];
- aux=v[x2][y2].x;
- y2=v[x2][y2].y;
- x2=aux;
- aux=v[x1][y1].x;
- y1=v[x1][y1].y;
- x1=aux;
- }
- if(ult==1)
- v[x1v][y1v]=v[x2v][y2v];
- /*
- for(int i=q1[0]; i>0; i--)
- {
- if(q2[i]>q1[i])
- {
- v[x1v][y1v]=v[x2v][y2v];
- return;
- }
- }
- */
- // if(a[ v[x2][y2].x +1 ] > a[ v[x1][y1].x +1 ])
- }
- }
- unsigned char rez[Q];
- int main()
- {
- fscanf(in,"%s %s",a+1,b+1);
- sa=strlen(a+1);
- sb=strlen(b+1);
- for(int i=1; i<=sa; i++)
- {
- for(int j=1; j<=sb; j++)
- {
- if(a[i]==b[j])
- {
- v[i][j].size=v[i-1][j-1].size+1;
- v[i][j].x=i-1;
- v[i][j].y=j-1;
- }
- modifica(i,j,i-1,j);
- modifica(i,j,i,j-1);
- }
- }
- int x=sa,y=sb,aux;
- while(v[x][y].size>0)
- {
- rez[++rez[0]]=a[ v[x][y].x +1 ];
- aux=v[x][y].x;
- y=v[x][y].y;
- x=aux;
- }
- for(int i=rez[0]; i>0; i--)
- {
- fprintf(out,"%c",rez[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement