Advertisement
a53

matrice_rara

a53
Apr 24th, 2017
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream f("matrice_rara.in");
  4. ofstream g("matrice_rara.out");
  5. int n,m,n1,n2,k;
  6. struct matrice_rara
  7. {
  8. int linie,coloana,valoare;
  9. };
  10. typedef matrice_rara MR;
  11. MR A[300001],B[300001],C[600001];
  12.  
  13. void citire_A()
  14. {
  15. for(int i=1;i<=n1;i++)
  16. f>>A[i].linie>>A[i].coloana>>A[i].valoare;
  17. }
  18. void citire_B()
  19. {
  20. for(int i=1;i<=n2;i++)
  21. f>>B[i].linie>>B[i].coloana>>B[i].valoare;
  22. }
  23.  
  24. void adunare()
  25. {
  26. int i=1,j=1;
  27. k=1;
  28. while(i<=n1&&j<=n2)
  29. {
  30. if(A[i].linie<B[j].linie)
  31. C[k].linie=A[i].linie,C[k].coloana=A[i].coloana,C[k].valoare=A[i].valoare,++i,++k;
  32. else
  33. {
  34. if(A[i].linie==B[j].linie)
  35. {
  36. if(A[i].coloana<B[j].coloana)
  37. C[k].linie=A[i].linie,C[k].coloana=A[i].coloana,C[k].valoare=A[i].valoare,++i,++k;
  38. else
  39. {
  40. if(A[i].coloana==B[j].coloana)
  41. {
  42. if(A[i].valoare+B[j].valoare==0)
  43. ++i,++j;
  44. else
  45. C[k].linie=A[i].linie,C[k].coloana=A[i].coloana,C[k].valoare=A[i].valoare+B[j].valoare,++i,++j,++k;
  46. }
  47. else
  48. C[k].linie=B[j].linie,C[k].coloana=B[j].coloana,C[k].valoare=B[j].valoare,++j,++k;
  49. }
  50. }
  51. else
  52. if(B[j].linie<A[i].linie)
  53. C[k].linie=B[j].linie,C[k].coloana=B[j].coloana,C[k].valoare=B[j].valoare,++j,++k;
  54. }
  55. }
  56. while(i<=n1)
  57. C[k].linie=A[i].linie,C[k].coloana=A[i].coloana,C[k].valoare=A[i].valoare,++i,++k;
  58. while(j<=n2)
  59. C[k].linie=B[j].linie,C[k].coloana=B[j].coloana,C[k].valoare=B[j].valoare,++j,++k;
  60. }
  61.  
  62. void afisare()
  63. {
  64. for(int i=1;i<k;i++)
  65. g<<C[i].linie<<' '<<C[i].coloana<<' '<<C[i].valoare<<'\n';
  66. }
  67.  
  68. int main()
  69. {
  70. f>>n>>m>>n1>>n2;
  71. citire_A();
  72. citire_B();
  73. adunare();
  74. g<<k-1<<'\n';
  75. afisare();
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement