【题解】

  把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀、后缀1最大值和次大值。

  还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情况。

                         0 1 1 0

                         0 1 1 0

                         0 0 0 0

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define rg register
#define N 200010
using namespace std;
int n,m,b[][],ans[][],f[],pos,pos2,Mx;
bool v[][];
struct rec{
int l,r;
}s[N][][];
inline int read(){
int k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
int main(){
n=read();
for(rg int i=;i<=n;i++){
memset(v,,sizeof(v));
for(rg int j=;j<;j++)
for(rg int k=;k<;k++) b[j][k]=read();
if(b[][]||b[][]){
int tmp=;
if(b[][]&&b[][]) tmp++;
Mx=max(Mx,tmp);
}
if(b[][]||b[][]){
int tmp=;
if(b[][]&&b[][]) tmp++;
Mx=max(Mx,tmp);
}
if(b[][]||b[][]){
int tmp=;
if(b[][]&&b[][]) tmp++;
Mx=max(Mx,tmp);
}
if(b[][]||b[][]){
int tmp=;
if(b[][]&&b[][]) tmp++;
Mx=max(Mx,tmp);
}
for(rg int j=;j<;j++){
bool ok=;
for(rg int k=;k<;k++)if(!b[j][k]) ok=;
if(ok) ans[][j]+=,v[][j]=;
}
for(rg int j=;j<;j++){
bool ok=;
for(rg int k=;k<;k++)if(!b[k][j]) ok=;
if(ok) ans[][j]+=,v[][j]=;
}
for(rg int j=;j<;j++){
if(v[][j]) continue;
for(rg int k=;k<;k++)if(b[j][k]){
s[i][][j].l++;
}
else break;
for(rg int k=;k>=;k--)if(b[j][k]){
s[i][][j].r++;
}
else break;
}
for(rg int j=;j<;j++){
if(v[][j]) continue;
for(rg int k=;k<;k++)if(b[k][j]){
s[i][][j].l++;
}
else break;
for(rg int k=;k>=;k--)if(b[k][j]){
s[i][][j].r++;
}
else break;
}
// for(rg int j=0;j<4;j++) printf("-%d ",s[i][0][j].l); puts("l");
// for(rg int j=0;j<4;j++) printf("-%d ",s[i][0][j].r); puts("r");
// for(rg int j=0;j<4;j++) printf("+%d ",s[i][1][j].l); puts("l");
// for(rg int j=0;j<4;j++) printf("+%d ",s[i][1][j].r); puts("r");
}
for(rg int j=;j<;j++){
for(rg int k=;k<;k++){
int mx=,mx2=,pos=,pos2=,mx3=,mx4=;
for(rg int i=;i<=n;i++){
if(s[i][j][k].l>mx){
mx=s[i][j][k].l;
pos=i;
}
}
for(rg int i=;i<=n;i++){
if(s[i][j][k].l>mx2&&i!=pos) mx2=s[i][j][k].l;
}
for(rg int i=;i<=n;i++){
if(s[i][j][k].r>mx3){
mx3=s[i][j][k].r;
pos2=i;
}
}
for(rg int i=;i<=n;i++){
if(s[i][j][k].r>mx4&&i!=pos2) mx4=s[i][j][k].r;
}
if(pos!=pos2) ans[j][k]+=mx+mx3;
else ans[j][k]+=max(mx+mx4,mx2+mx3);
// printf("[%d %d %d %d]\n",mx,mx2,mx3,mx4);
}
}
for(rg int i=;i<;i++)
for(rg int j=;j<;j++) Mx=max(Mx,ans[i][j]);
printf("%d\n",Mx);
return ;
}

牛客练习赛29 B 列队的更多相关文章

  1. 牛客练习赛 29 E 位运算?位运算!(线段树)

    题目链接  牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...

  2. 牛客练习赛29 B

    炎热的早上,gal男神们被迫再操场上列队,gal男神们本来想排列成x∗x的正方形,可是因为操场太小了(也可能是gal男神太大了),校长安排gal男神们站成多个4∗4的正方形(gal男神们可以正好分成n ...

  3. 牛客练习赛29 F 算式子

    https://www.nowcoder.com/acm/contest/211/F 经典题. 1.分区间 2.向下取整的值变化 & 合并相同值 #include <bits/stdc+ ...

  4. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  5. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  6. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  7. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  8. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  9. 牛客练习赛26:D-xor序列(线性基)

    链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...

随机推荐

  1. idea 启动时报 error:java 无效的源发行版11

    编译的版本不符合,需要修改统一 

  2. 彩色模型 分类: 图像处理 Matlab 2015-01-08 20:43 364人阅读 评论(0) 收藏

    彩色模型(又称彩色空间或彩色系统)是描述色彩的一种方法,本质上,彩色模型就是坐标系统和子空间的规范,系统中的每种颜色由单个点来表示.下面介绍两种最常用的彩色模型. 一.RGB彩色模型: RGB模型是最 ...

  3. FileStream和BinaryReader,BinaryWriter,StreamReader,StreamWriter的区别

    FileStream对于在文件系统上读取和写入文件非常有用,FileStream缓存输入和输出,以获得更好的性能.FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字 ...

  4. Android的handler消息机制

    Hnadler机制中有这么几部分构成,包括 handler.Message.Looper和MessageQueue.要想在一个线程中使用Handler的话必须要有Looper和MessageQueue ...

  5. Android开发学习——android反编译

    第一种: 1.下载下边的三个jar包,对dex2jar和jd-gui进行解压 2.将需要反编译的apk后缀名改为.rar,然后进行解压 3.将解压后生成的classes.dex加入第一步解压后的dex ...

  6. AJPFX关于IO流的简单总结

    IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流,比如InputStream,Output ...

  7. dubbo系列--集群容错

    作为一个程序员,咱们在开发的时候不仅仅是完成某个功能,更要考虑其异常情况程序如何设计,比如说:dubbo的消费端调用服务方异常的情况,要不要处理?如何处理? dubbo提供了多种集群容错机制,默认是f ...

  8. P1440 求m区间内的最小值

    题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...

  9. joomla建站-双语CMS系统开发的实现

    首先,请确保你的网站安装了你所需的双语语言,详细安装过程见:https://www.cnblogs.com/surfer/p/9619345.html 第一步:设置内容管理 可以按照个人需求进行语言编 ...

  10. ajax 请求spring之post

    # 背景 现在使用spring boot开发一个web应用是非常普遍的了,ajax请求更是标配:那么你在ajax请求时,是否遇到过在controller中获取不到参数的情况呢?特别是post请求: # ...