Advertisement
Hezov

Tort ONI X 2016

Sep 15th, 2024
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | Source Code | 0 0
  1. /// https://www.pbinfo.ro/probleme/1677/tort
  2. #include <fstream>
  3. #include <algorithm>
  4. using namespace std;
  5. ifstream cin("tort.in");
  6. ofstream cout("tort.out");
  7. char mat[505][505];
  8. int dp[505][505];
  9. bool valid(int i, int j , int l)
  10. {
  11.     if(mat[i][j]=='X') return false;
  12.     if(mat[i-l+1][j]=='X') return false;
  13.     if(mat[i][j-l+1]=='X') return false;
  14.     if(mat[i-l+1][j-l+1] == 'X') return false;
  15.     return true;
  16. }
  17. void update(int pi, int pj, int l)
  18. {
  19.     for(int i = pi-l+1;i<=pi;i++)
  20.         for(int j = pj-l+1;j<=pj;j++)
  21.             mat[i][j] = 'X';
  22. }
  23. int main()
  24. {
  25.     int n , m, maxL = -1e9 ;
  26.     cin>>n>>m;
  27.     //Construim dp[i][j] = patratul de latura maxima cu coltul din dreapta-jos in (i,j)
  28.     for(int i = 1;i<=n;i++)
  29.         for(int j = 1;j<=m;j++)
  30.         {
  31.             cin>>mat[i][j];
  32.             dp[i][j] = 1;
  33.             if(mat[i][j]==mat[i-1][j]&&mat[i][j]==mat[i][j-1]&&mat[i][j]==mat[i-1][j-1])
  34.                 dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
  35.             maxL = max(maxL,dp[i][j]);
  36.         }
  37.     int p = 0;
  38.     for(int k = maxL;k>0;k--)
  39.     {
  40.         for(int i = 1;i<=n;i++)
  41.             for(int j = 1;j<=m;j++)
  42.             {
  43.                 if(dp[i][j]>=k&&valid(i,j,k))
  44.                 {
  45.                     cout<<k<<' '<<i<<' '<<j<<'\n';
  46.                     update(i,j,k);
  47.                 }
  48.             }
  49.     }
  50.     return 0;
  51. }
Tags: dp ONI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement