Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cctype>
- #include <string>
- #include <cstdio>
- using namespace std;
- string v1[105],v2[105];
- int dp[105][105],sol[105];
- void lcs(int n,int m)
- {
- int i,j;
- for(i=1;i<=n;++i)
- for(j=1;j<=m;++j)
- if(v1[i].compare(v2[j])==0)
- dp[i][j]=dp[i-1][j-1]+1;
- else
- dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
- int x=n,y=m;
- while(dp[x][y])
- {
- if(v1[x].compare(v2[y])==0)
- {
- sol[dp[x][y]]=x;
- --x;--y;
- }
- else
- if(max(dp[x-1][y],dp[x][y-1])==dp[x-1][y])
- --x;
- else
- --y;
- }
- }
- void out(string s)
- {
- for(int i=0;i<s.size();++i)
- printf("%c",s[i]);
- }
- int main()
- {
- ///freopen("1.in","r",stdin);
- ///freopen("1.out","w",stdout);
- int nr1,nr2,i,j,ok;
- string buff;
- char ch;
- while(1)
- {
- nr1=0;nr2=0;
- while(1)
- {
- ok=scanf("%c",&ch);
- if(!(ok!=EOF))
- return 0;
- if(isalpha(ch))
- buff+=ch;
- else
- {
- if(!buff.empty())
- v1[++nr1]=buff;
- buff.clear();
- if(ch=='#')
- break;
- }
- }
- while(1)
- {
- ok=scanf("%c",&ch);
- if(!(ok!=EOF))
- return 0;
- if(!isalpha(ch))
- {
- if(!buff.empty())
- v2[++nr2]=buff;
- buff.clear();
- if(ch=='#')
- break;
- continue;
- }
- buff+=ch;
- }
- lcs(nr1,nr2);
- for(i=1;i<dp[nr1][nr2];++i)
- out(v1[sol[i]]),printf(" ");
- out(v1[sol[dp[nr1][nr2]]]);
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement