fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main(){
  5. int a[10009],n=0,m=0,b[10009],sum[10009][10009],e[10009];
  6. string s,c;
  7. bool a1[10009],b1[10009];
  8. getline(cin,s);
  9. s+=' ';
  10. for(int i=0;i<s.size();i++){
  11. if(s[i]!=' '){
  12. c+=s[i];
  13. }
  14. else{
  15. n++;
  16. a[n]=stoi(c);
  17. c="";
  18. }
  19. }
  20. getline(cin,s);
  21. getline(cin,s);
  22. s+=' ';
  23. c="";
  24. for(int i=0;i<s.size();i++){
  25. if(s[i]!=' '){
  26. c+=s[i];
  27. }
  28. else{
  29. m++;
  30. b[m]=stoi(c);
  31. c="";
  32. }
  33. }
  34. for(int i=1;i<=n;i++){
  35. for(int j=1;j<=m;j++){
  36. if(a[i]==b[j]&&!a1[i]&&!b1[j]){
  37. sum[i][j]=max(sum[i-1][j]+1,sum[i][j-1]+1);
  38. a1[i]=true;
  39. b1[j]=true;
  40. }
  41. else{
  42. sum[i][j]=max(sum[i-1][j],sum[i][j-1]);
  43. }
  44. }
  45. }
  46. int i=n,j=m,t=0;
  47. while(sum[i][j]!=0){
  48. if(a[i]==b[j]){
  49. t++;
  50. e[t]=a[i];
  51. i--;
  52. j--;
  53. }
  54. else if(sum[i][j-1]>sum[i-1][j]){
  55. j--;
  56. }
  57. else{
  58. i--;
  59. }
  60. }
  61. cout<<sum[n][m]<<"\n";
  62. for(int i=t;i>=1;i--){
  63. cout<<e[i]<<" ";
  64. }
  65. }
Success #stdin #stdout 0.01s 5280KB
stdin
2 4 1 0 1 9 8 0

1 1 0 8 2 0 0 9
stdout
4
1 0 8 0