博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LuoguP1169 bzoj1057】[ZJOI2007]棋盘制作
阅读量:5164 次
发布时间:2019-06-13

本文共 1937 字,大约阅读时间需要 6 分钟。

 

 

首先把矩阵转化一下,把横纵坐标和为偶数点的值取反,这样就转化成求最大的'0'或'1'矩阵。

这道题每个数字是在格子内的,不能在边界包含障碍点。

求最大的0矩阵时,把1作为障碍点。求1同理。

然后求最接近的就可以用树状数组求解啦~

 

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 const int N=2100,Inf=(int)1e9; 9 int n,m,a1,a2;10 int a[N][N],l[N][N],r[N][N],last[N][N],cl[N][N],cr[N][N];11 12 13 int minn(int x,int y){
return x
y ? x:y;}15 16 void add(int x,int y,int d)17 {18 for(int i=y;i<=m;i+=(i&(-i))) cl[x][i]=maxx(cl[x][i],d);19 for(int i=y;i>=1;i-=(i&(-i))) cr[x][i]=minn(cr[x][i],d);20 }21 22 int get(int x,int y,int tmp)23 {24 if(tmp==0)25 {26 int ans=0;27 for(int i=y-1;i>=1;i-=(i&(-i))) ans=maxx(ans,cl[x][i]);28 if(ans==0) return 1;29 else return ans+1;30 }31 else32 {33 int ans=Inf;34 for(int i=y+1;i<=m;i+=(i&(-i))) ans=minn(ans,cr[x][i]);35 if(ans>=Inf) return m;36 else return ans-1;37 }38 }39 40 void solve(int tmp)41 {42 memset(cl,0,sizeof(cl));43 memset(cr,63,sizeof(cr));44 for(int i=1;i<=n;i++)45 for(int j=1;j<=m;j++)46 {47 if(a[i][j]==tmp) add(i,j,j);48 }49 memset(l[0],0,sizeof(l[0]));50 memset(r[0],63,sizeof(r[0]));51 for(int i=1;i<=n;i++)52 {53 for(int j=1;j<=m;j++)54 {55 if(a[i][j]==tmp) continue;56 if(a[i-1][j]==tmp)57 {58 l[i][j]=get(i,j,0);//debug59 r[i][j]=get(i,j,1);//debug60 last[i][j]=i-1;61 }62 else63 {64 l[i][j]=maxx(l[i-1][j],get(i,j,0));65 r[i][j]=minn(r[i-1][j],get(i,j,1));66 last[i][j]=last[i-1][j];67 }68 int xx=r[i][j]-l[i][j]+1;69 int yy=i-last[i][j];70 a1=maxx(a1,minn(xx,yy)*minn(xx,yy));71 a2=maxx(a2,xx*yy);72 }73 }74 }75 76 int main()77 {78 freopen("a.in","r",stdin);79 scanf("%d%d",&n,&m);80 a1=0;a2=0;81 for(int i=1;i<=n;i++)82 for(int j=1;j<=m;j++)83 {84 scanf("%d",&a[i][j]);85 if((i+j)%2==0) a[i][j]^=1;86 }87 solve(1);88 solve(0);89 printf("%d\n%d\n",a1,a2);90 return 0;91 }

 

转载于:https://www.cnblogs.com/KonjakJuruo/p/5787900.html

你可能感兴趣的文章
Revolving Digits(hdu 4333)
查看>>
在 Azure 中的 Linux 虚拟机上使用 SSL 证书保护 Web 服务器
查看>>
安卓 自定义吐司样式
查看>>
自定义动画
查看>>
准备些一篇目前技术目前公司 使用技术的 解析
查看>>
Sturct类型装箱时会遇到的问题
查看>>
mybatis 在自动生成时设置不生成Example类
查看>>
如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)...
查看>>
React-AR概述
查看>>
踏上Salesforce的学习之路(一)
查看>>
json中拿到想拿的值
查看>>
ios开发抽屉效果的封装使用
查看>>
C#使用Log4Net记录日志
查看>>
从struts2源码学到的技巧
查看>>
xcode如何运行下载的demo工程
查看>>
JavaScript Date 日期操作
查看>>
优秀程序员不得不知道的20个位运算技巧
查看>>
70:Climbing Stairs【DP】
查看>>
jquery实现全选、反选、不选
查看>>
logback配置
查看>>