【题解】

  把某一行或某一列有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. 标准行cp功能

    #include<stdio.h> int main(int argc,char *argv[]) { FILE *src_fp,*des_fp; ]={}; ) { printf(&qu ...

  2. Step 4: Install and Configure Databases

    https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_installing_configuring_dbs.htm ...

  3. layui配置

    layui是一个全局变量,可以在任何地方访问到 layui.config 方法主配置信息(经测试好像不能添加额外属性) layui.setter读取主配置属性 layui.extend 方法增加主配置 ...

  4. 善用oss客户端工具

    有个需求:需要我到阿里oss上下载ts文件 估摸了一下100多个只占了6分之一的时间,全下下来得700多个 还不算上正在运行的 正当我手动一个一个点的时候: 100个 总算点完了 全部在桌面是摆着: ...

  5. 移动端UI自动化Appium测试——Appium server两种启动方式

    执行自动化测试之前,需要先运行appium server,这样才能形成server与java client的通信,启动server有两种方式,一种是命令,一种是按钮图标,具体使用如下: 1.用命令启动 ...

  6. Java基础教程(24)--集合

    一.Java集合框架   集合,有时也称为容器,是一个用来存储和管理多个元素的对象.Java中的集合框架定义了一套规范,用来表示和操作集合,使具体操作与实现细节解耦.集合框架都包含下列内容: 接口:这 ...

  7. dede自定义表单放首页出错的解决办法

    一.当自定义表单放首页提交的时候跳出这个页面怎么解决 二.解决办法 可能有多个from表单提交出错,也就是代码冲突的意思,只要把代码检查好,from提交不要重复冲突就可以了

  8. iOS Programming Auto Layout: Programmatic Constraints 自动布局:通过编程限制

    iOS Programming  Auto Layout: Programmatic Constraints  1.  However, if your views are created in co ...

  9. 【译】x86程序员手册34-9.7错误代码

    9.7 Error Code 错误代码 With exceptions that relate to a specific segment, the processor pushes an error ...

  10. codevs 1082 线段树练习 3 --分块练习

    时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[ ...