这题有毒

P1736 创意吃鱼法

aface0427 @ 2017-11-07 13:50:23

6个int数组炸空间

5个int数组1个char数组WA点1

5个int数组1个bool数组用cinTLE点10

5个int数组1个bool数组scanfWA点8

5个int数组1个bool数组开2560*2560还是炸空间

5个int数组1个bool数组开2505*2505用快读勉强卡过


by xw001 @ 2017-11-07 14:00:02

@aface0427 五个int数组不就行了吗


by aface0427 @ 2017-11-07 18:09:00

@xw001 2333 说得好 可以用四个 不过懒得改


by Bartholomew @ 2017-12-01 21:40:29

@aface0427

看看你的代码! ..


by aface0427 @ 2018-01-30 10:44:57

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
const int maxn=1e6+7;
void read(int &x)
{
  char c=getchar();
  x=0;
   int flag=1;
  while(!isdigit(c))
 {
   if(c=='-')flag=-1;
   c=getchar();
 }
 while(isdigit(c))
{
x=x*10+c-48;
c=getchar();
}
  x*=flag;
}
int n,m;
int dp[2505][2505];
int height[2505][2505];
int lef[2505][2505];
int rig[2505][2505];
bool ju[2505][2505];
int dp2[2505][2505];
int main()
{
  read(n),read(m);
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      int x;
      read(x);
      ju[i][j]=x;
    }
  }
  for(int i=n;i>=1;i--)
  {
    for(int j=1;j<=m;j++)
    {
      if(ju[i][j]==1)
      {
        height[i][j]=0;
      }
      else height[i][j]=height[i+1][j]+1;
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      if(ju[i][j]==1)
      {
        lef[i][j]=0;
      }
      else lef[i][j]=lef[i][j-1]+1;
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=m;j>=1;j--)
    {
      if(ju[i][j]==1)
      {
        rig[i][j]=0;
      }
      else rig[i][j]=rig[i][j+1]+1;
    }
  }
  for(int i=1;i<=n;i++)
  {
    if(ju[i][m])dp[i][m]=1;
  }
  for(int i=1;i<=m;i++)
  {
    if(ju[n][i])
    {
      dp[n][i]=1;
      dp2[n][i]=1;
    }
  }
  for(int i=1;i<=n;i++)
  {
    if(ju[i][1])dp[i][1]=1;
  }
  for(int i=n-1;i>=1;i--)
  for(int j=m-1;j>=1;j--)
  {
    if(ju[i][j])
    {
      dp[i][j]=min(min(dp[i+1][j+1]+1,rig[i][j+1]+1),height[i+1][j]+1);
    }
  }
  for(int i=n-1;i>=1;i--)
  {
    for(int j=2;j<=m;j++)
    {
      if(ju[i][j])
      {
        dp2[i][j]=min(height[i+1][j]+1,min(dp2[i+1][j-1]+1,lef[i][j-1]+1));
      }
    }
  }
  int ans=0;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      ans=max(ans,max(dp[i][j],dp2[i][j]));
    }
  }
  cout<<ans;
  return 0;
}

@[Bartholomew](/space/show?uid=50047) 

|