Guest User

Untitled

a guest
Dec 8th, 2019
86
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int a[101][101], n, m, k, p, L[101], c[101], x[101], i, j;
  6.  
  7. int main()
  8. {
  9. cin>>n>>m>>k;
  10. for(i=1; i<=n; ++i)
  11. for(j=1; j<=m; ++j)
  12. cin>>a[i][j];
  13.  
  14. for(i=1; i<=n; i++)
  15. {
  16. a[i][0]=0;
  17. for(j=1; j<=m; ++j)
  18. a[i][0]+=a[i][j];
  19. }
  20. p=0;
  21. if(k==n-1)
  22. {
  23. //este posibil ca toate liniile sa aibe sume diferite
  24. //determinam suma maxima SMAX
  25. //toate celelalte linii se vor modifica astfel incat sa se obtina suma SMAX
  26. //pe fiecare linie va creste cel mai mic element
  27. int SMAX=0;
  28. for(i=1; i<=n; ++i)
  29. if(a[i][0]>SMAX)
  30. SMAX=a[i][0];
  31. for(i=1; i<=n; ++i)
  32. if(a[i][0]!=SMAX)
  33. {
  34. int jmin=1;
  35. for(j=2; j<=m; ++j)
  36. if(a[i][j]<a[i][jmin])
  37. jmin=j;
  38. ++p; L[p]=i; c[p]=jmin; x[p]=a[i][jmin]+(SMAX-a[i][0]);
  39. }
  40. }
  41. else
  42. {
  43. //trebuie sa existe cel putin n-k linii cu aceeasu syma a elementelor
  44. //determinam suma care apare de cel putin n-k ori, fie aceasta s
  45. //pentru celelalte linii vom modifica cate un element
  46. //daca suma este mai mica decat s, marim cel mai mic element, daca suma este mai mare decat s micsoram cel mai mare element.Daca nu ajunge, continuam cu micsorarea
  47. int s=-1;
  48. for(i=1; i<=n && s==-1; i++)
  49. {
  50. int cnt=1;
  51. for(j=1; j<=n; j++)
  52. if(a[i][0]==a[j][0])
  53. cnt++;
  54. if(cnt>=n-k)
  55. s=a[i][0];
  56. }
  57. for(i=1; i<=n; ++i)
  58. if(a[i][0]<s)
  59. {
  60. //vom mari un element
  61. int jmin=1;
  62. for(j=2; j<=m; ++j)
  63. if(a[i][j]<a[i][jmin])
  64. jmin=j;
  65. int plus=s-a[i][0];
  66. a[i][jmin]+=plus;
  67. ++p; L[p]=i; c[p]=jmin; x[p]=a[i][jmin];
  68. }
  69. else
  70. while(a[i][0]>s)
  71. {
  72. //vom micsora un element
  73. int jmax=1;
  74. for(j=2; j<=m; ++j)
  75. if(a[i][j]>a[i][jmax])
  76. jmax=j;
  77. int dif;
  78. if(a[i][0]-s<=a[i][jmax])
  79. dif=a[i][0]-s;
  80. else
  81. dif=a[i][jmax];
  82. a[i][jmax]-=dif;
  83. a[i][0]-=dif;
  84. ++p; L[p]=i; c[p]=jmax; x[p]=a[i][jmax];
  85. }
  86. }
  87. cout<<p<<endl;
  88. for(i=1; i<=p; i++)
  89. cout<<L[i]<<" "<<c[i]<<" "<<x[i]<<endl;
  90. return 0;
  91. }
RAW Paste Data