Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
#include
#include
#include
#include
using namespace std; typedef long long ll; const int maxn = 222; const int maxk = 55; char mat[maxn][maxn]; int L[maxn][maxn][maxk]; int R[maxn][maxn][maxk]; int up[maxn][maxn][maxk]; int down[maxn][maxn][maxk]; int rows[maxn][maxn][maxk]; int cols[maxn][maxn][maxk]; int main() { ios_base::sync_with_stdio(false); int n, m, k; cin >> n >> m >> k; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> mat[i][j]; } } for(int x = 0; x <= k; x++) { for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { up[i][j][x] = 0; } else { up[i][j][x] = 1; if(i > 0) { up[i][j][x] += up[i - 1][j][tmp_x]; } } } } } for(int x = 0; x <= k; x++) { for(int i = n - 1; i >= 0; i--) { for(int j = m - 1; j >= 0; j--) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { down[i][j][x] = 0; } else { down[i][j][x] = 1; if(i + 1 < n) { down[i][j][x] += down[i + 1][j][tmp_x]; } } } } } for(int x = 0; x <= k; x++) { for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { L[i][j][x] = 0; } else { L[i][j][x] = 1; if(j > 0) { L[i][j][x] += L[i][j - 1][tmp_x]; } } } } } for(int x = 0; x <= k; x++) { for(int i = n - 1; i >= 0; i--) { for(int j = m - 1; j >= 0; j--) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { R[i][j][x] = 0; } else { R[i][j][x] = 1; if(j + 1 < m) { R[i][j][x] += R[i][j + 1][tmp_x]; } } } } } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { for(int x = 0; x <= k; x++) { rows[i][j][x] = 0; int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x >= 0) { for(int y = 0; y <= tmp_x; y++) { int tmp_y = tmp_x - y; int sum = 1; if(i + 1 < n) { sum += down[i + 1][j][tmp_y]; } if(i > 0) { sum += up[i - 1][j][y]; } rows[i][j][x] = max(rows[i][j][x], sum); } } } } } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { for(int x = 0; x <= k; x++) { cols[i][j][x] = 0; int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x >= 0) { for(int y = 0; y <= tmp_x; y++) { int tmp_y = tmp_x - y; int sum = 1; if(j + 1 < m) { sum += R[i][j + 1][y]; } if(j > 0) { sum += R[i][j - 1][tmp_y]; } cols[i][j][x] = max(cols[i][j][x], sum); } } } } } int result= 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp_x = k; int obstacle = 0; if(mat[i][j] == '*') { tmp_x--; obstacle = 1; } if(tmp_x >= 0) { for(int x = 0; x <= tmp_x; x++) { int y = tmp_x - x; int r_tmp = x + obstacle; int c_tmp = y + obstacle; result = max(result, rows[i][j][r_tmp] + cols[i][j][c_tmp] - 1); } } } } cout << result - 1 << endl; return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)