悬线法WA on #1???

P1387 最大正方形

打算下数据特判了捏(
by NGC_6357 @ 2023-10-12 19:29:19


``` #include<iostream> #include<cmath> using namespace std; int n, m, a[101][101], f[101][101], ans = 0; void Scanf(){ cin >> n >> m; for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ cin>>a[i][j]; } } } void H(){ for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ if(a[i][j] == 0){ continue; } f[i][j] = min(min (f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1]) + 1; } } } int main(){ Scanf(); H(); for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ if(f[i][j] > ans){ ans = f[i][j]; } } } cout<<ans<<endl; return 0; } ```
by CCA_zhujunwei @ 2023-10-16 19:57:49


@[CCA_zhujunwei](/user/1014750) %%%
by NGC_6357 @ 2023-10-18 19:40:41


找到问题了 ```cpp #include <bits/stdc++.h> #define N 2005 using namespace std; int n, m, ans1, ans2; int ma[N][N], u[N][N], l[N][N], r[N][N]; void left(){ for(int i = 1; i <= n; i++){ for(int j = 2; j <= m; j++){ if(ma[i][j - 1] == 1) l[i][j] = l[i][j - 1];// 在这里写一个ma[i][j] == 1判一下自己 } } } void right(){ for(int i = 1; i <= n; i++){ for(int j = m; j > 1; j--){ if(ma[i][j] == 1) r[i][j - 1] = r[i][j]; } } } void solve(){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(i > 1 && ma[i - 1][j] == 1 && ma[i][j] == 1){// 或者在这里判一下 u[i][j] = u[i - 1][j] + 1; l[i][j] = max(l[i][j], l[i - 1][j]); r[i][j] = min(r[i][j], r[i - 1][j]); } int a = r[i][j] - l[i][j] + 1; int b = min(a, u[i][j]); ans1 = max(ans1, b); } } } signed main(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ scanf("%d", &ma[i][j]); u[i][j] = 1; l[i][j] = j; r[i][j] = j; } } left(); right(); solve(); printf("%d", ans1); return 0; } ```
by NGC_6357 @ 2023-10-18 19:41:32


旋线法?黄题绿解(
by yyrwlj @ 2023-10-20 09:05:39


|