Advertisement
a53

mostenire2

a53
Dec 26th, 2019
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream cin("mostenire.in");
  4. ofstream cout("mostenire.out");
  5. int n,m;
  6. long long sol;
  7.  
  8. char s[1005];
  9. bool col[1005];
  10. int v[1005],l[105][1005],c[105][1005],lst[1005];
  11.  
  12. int main()
  13. {
  14. cin>>n>>m;
  15. for(int i=1;i<=n;++i)
  16. {
  17. cin>>(s+1);
  18. for(int j=1;j<=m;++j)
  19. {
  20. if(s[j]=='0')
  21. continue;
  22. l[i][j]=l[i-1][j]+1;
  23. }
  24. for(int j=m;j>=1;--j)
  25. {
  26. if(s[j]=='0')
  27. continue;
  28. c[i][j]=c[i][j+1]+1;
  29. }
  30. }
  31. for(int i=1;i<=n;++i)
  32. {
  33. for(int j=i+2;j<=n;++j)
  34. {
  35. for(int k=1;k<=m;++k)
  36. {
  37. col[k]=(l[j][k]-l[i-1][k]==j-i+1);
  38. v[k]=v[k-1]+col[k];
  39. }
  40. int poz=0;
  41. for(int k=1;k<=m;++k)
  42. {
  43. lst[k]=poz;
  44. if(l[j][k]-l[i-1][k]!=j-i+1)
  45. poz=k;
  46. }
  47. poz=1;
  48. for(int k=1;k<=m;++k)
  49. {
  50. if(!col[k])
  51. continue;
  52. int val=min(c[i][k],c[j][k]);
  53. while(poz<k+val&&lst[poz]<k)
  54. ++poz;
  55. if(poz<k+val)
  56. sol+=v[k+val-1]-v[poz-1];
  57. }
  58. }
  59. }
  60. cout<<sol<<'\n';
  61. return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement