Advertisement
a53

Cetate

a53
Mar 11th, 2020
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. int n,m,w,a[550][550],pr[550],su[550];
  4. long long sa[550][550],v[550];
  5. struct grup{long long p1;int p2,p3,p4,p5;} sol;
  6. void act(long long s1,int x1,int y1,int x2,int y2)
  7. {
  8. if(sol.p1>s1) return;
  9. if(sol.p1==s1 && sol.p2<x1) return;
  10. if(sol.p1==s1 && sol.p2==x1 && sol.p3<y1) return;
  11. if(sol.p1==s1 && sol.p2==x1 && sol.p3==y1 && sol.p4<x2) return;
  12. if(sol.p1==s1 && sol.p2==x1 && sol.p3==y1 && sol.p4==x2 && sol.p5<=y2) return;
  13. sol.p1=s1,sol.p2=x1,sol.p3=y1,sol.p4=x2,sol.p5=y2;
  14. }
  15. int main()
  16. {
  17. ifstream in("cetate.in");
  18. ofstream out("cetate.out");
  19. int t;
  20. in>>t>>n>>m>>w;
  21. sol.p1=-(1LL << 62);
  22. for(int i=1;i<=n;++i)
  23. for(int j=1;j<=m;++j)
  24. {
  25. in>>a[i][j];
  26. sa[i][j]=a[i][j]+sa[i-1][j];
  27.  
  28. }
  29. if(t==1)
  30. {
  31. for(int i=1;i<=n;++i)
  32. for(int j=1;j<=m;++j)
  33. sa[i][j]=a[i][j]+sa[i-1][j]+sa[i][j-1]-sa[i-1][j-1];
  34. for(int i=w;i<=n;++i)
  35. for(int j=w;j<=m;++j)
  36. act(sa[i][j]-sa[i-w][j]-sa[i][j-w]+sa[i-w][j-w],i-w+1,j-w+1,i,j);
  37. }
  38. else
  39. {
  40. for (int i1=1;i1<=n;++i1) {
  41. for (int i2=i1;i2<=n && i2<i1+w;++i2)
  42. {
  43. for (int j=1;j<=m;++j)
  44. v[j]=sa[i2][j]-sa[i1-1][j]+v[j-1];
  45. for (int j=1;j<=m;++j)
  46. {
  47. if(j%w==0 || v[j]<v[pr[j-1]])
  48. pr[j]=j;
  49. else
  50. pr[j]=pr[j-1];
  51. }
  52. for (int j=m;j>=0; --j)
  53. {
  54. if(j==m || (j+1)%w==0 || v[j]<=v[su[j+1]])
  55. su[j]=j;
  56. else
  57. su[j]=su[j+1];
  58. }
  59.  
  60. for (int j=1; j<=m; ++j)
  61. {
  62. if(j<w)
  63. {
  64. act(v[j] - v[pr[j-1]],
  65. i1, pr[j-1]+1, i2, j);
  66. continue;
  67. }
  68. int left=max(0, j-w);
  69. int right=j-1;
  70. if(v[su[left]] <= v[pr[right]])
  71. act(v[j]-v[su[left]],
  72. i1, su[left]+1, i2, j);
  73. else
  74. act(v[j]-v[pr[right]],
  75. i1, pr[right]+1, i2, j);
  76. }
  77. }
  78. }
  79.  
  80. }
  81. long long best_sum;
  82. int i1, i2, j1, j2;
  83. best_sum=sol.p1,i1=sol.p2,j1=sol.p3,i2=sol.p4,j2=sol.p5;
  84. out << best_sum << '\n';
  85. out << i1 << ' ' << j1 << ' ' << i2 << ' ' << j2 << '\n';
  86.  
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement