Advertisement
a53

Triunghi5

a53
Mar 11th, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. //Em. Cerchez 100 puncte
  2. #include <fstream>
  3. #define NMAX 1002
  4.  
  5. using namespace std;
  6. ifstream fin("triunghi.in");
  7. ofstream fout("triunghi.out");
  8. int n, Q;
  9. int A[NMAX][NMAX];
  10. int sl[NMAX][NMAX];//sl[i][j]=suma elementele de pe linia i de la 1 la j
  11. int sd[NMAX][NMAX];//sd[i][j]=suma elem din dreptunghiul cu colutl 1,1 si coltul i,j
  12. int st[NMAX][NMAX];//st[i][j] este suma elementelor din trapezul cu baza mare pe linia 1
  13. //si baza mica pe linia i de la 1 la j
  14. int smax;
  15. int detsuma(int lin, int col, int k);
  16. int main()
  17. {int i, j, lin, col, k, t, suma;
  18. fin>>n;
  19. for (i=1; i<=n; i++)
  20. for (j=1; j<=n; j++)
  21. {
  22. fin>>A[i][j];
  23. sl[i][j]=sl[i][j-1]+A[i][j];
  24. sd[i][j]=sd[i-1][j]+sd[i][j-1]-sd[i-1][j-1]+A[i][j];
  25. if (j==n) st[i][j]=sd[i][j]; else st[i][j]=st[i-1][j+1]+sl[i][j];
  26. }
  27.  
  28. fin>>Q;
  29. for (t=0; t<Q; t++)
  30. {
  31. fin>>lin>>col>>k;
  32. if (k>0)
  33. suma=detsuma(lin,col,k);
  34. else
  35. suma=sd[lin][col]-sd[lin][col+k]-sd[lin+k][col]+sd[lin+k][col+k]-detsuma(lin+k+1,col+k+1,-k-1);
  36. if (suma>smax) smax=suma;
  37. }
  38. fout<<smax<<'\n';
  39. fout.close();
  40. return 0;
  41. }
  42.  
  43.  
  44. int detsuma(int lin, int col, int k)
  45. {
  46. if (col+k-1==n)
  47. return st[lin+k-1][col]-sd[lin+k-1][col-1]-sd[lin-1][col+k-1]+sd[lin-1][col-1];
  48. return st[lin+k-1][col]-sd[lin+k-1][col-1]-st[lin-1][col+k] +sd[lin-1][col-1];
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement