Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// https://www.pbinfo.ro/probleme/1677/tort
- #include <fstream>
- #include <algorithm>
- using namespace std;
- ifstream cin("tort.in");
- ofstream cout("tort.out");
- char mat[505][505];
- int dp[505][505];
- bool valid(int i, int j , int l)
- {
- if(mat[i][j]=='X') return false;
- if(mat[i-l+1][j]=='X') return false;
- if(mat[i][j-l+1]=='X') return false;
- if(mat[i-l+1][j-l+1] == 'X') return false;
- return true;
- }
- void update(int pi, int pj, int l)
- {
- for(int i = pi-l+1;i<=pi;i++)
- for(int j = pj-l+1;j<=pj;j++)
- mat[i][j] = 'X';
- }
- int main()
- {
- int n , m, maxL = -1e9 ;
- cin>>n>>m;
- //Construim dp[i][j] = patratul de latura maxima cu coltul din dreapta-jos in (i,j)
- for(int i = 1;i<=n;i++)
- for(int j = 1;j<=m;j++)
- {
- cin>>mat[i][j];
- dp[i][j] = 1;
- if(mat[i][j]==mat[i-1][j]&&mat[i][j]==mat[i][j-1]&&mat[i][j]==mat[i-1][j-1])
- dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
- maxL = max(maxL,dp[i][j]);
- }
- int p = 0;
- for(int k = maxL;k>0;k--)
- {
- for(int i = 1;i<=n;i++)
- for(int j = 1;j<=m;j++)
- {
- if(dp[i][j]>=k&&valid(i,j,k))
- {
- cout<<k<<' '<<i<<' '<<j<<'\n';
- update(i,j,k);
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement