fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int a[10009],n=0,m=0,b[10009],sum[10009][10009],e[10009];
  5. string s,c;
  6. bool a1[10009],b1[10009];
  7. int main(){
  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. for(int i=1;i<=n;i++){
  47. for(int j=1;j<=m;j++){
  48. cout<<sum[i][j]<<" ";
  49. }
  50. cout<<"\n";
  51. }
  52. int i=n,j=m,t=0;
  53. while(sum[i][j]!=0){
  54. if(a[i]==b[j]){
  55. t++;
  56. e[t]=a[i];
  57. i--;
  58. j--;
  59. }
  60. else if(sum[i][j-1]>sum[i-1][j]){
  61. j--;
  62. }
  63. else{
  64. i--;
  65. }
  66. }
  67. for(int i=t;i>=1;i--){
  68. cout<<e[i]<<" ";
  69. }
  70. }
Success #stdin #stdout 0s 5280KB
stdin
2 4 1 0 1 9 8 0

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