牛客练习赛29 B 列队

【题解】
把某一行或某一列有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 列队的更多相关文章
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- 牛客练习赛29 B
炎热的早上,gal男神们被迫再操场上列队,gal男神们本来想排列成x∗x的正方形,可是因为操场太小了(也可能是gal男神太大了),校长安排gal男神们站成多个4∗4的正方形(gal男神们可以正好分成n ...
- 牛客练习赛29 F 算式子
https://www.nowcoder.com/acm/contest/211/F 经典题. 1.分区间 2.向下取整的值变化 & 合并相同值 #include <bits/stdc+ ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
随机推荐
- 标准行cp功能
#include<stdio.h> int main(int argc,char *argv[]) { FILE *src_fp,*des_fp; ]={}; ) { printf(&qu ...
- Step 4: Install and Configure Databases
https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_installing_configuring_dbs.htm ...
- layui配置
layui是一个全局变量,可以在任何地方访问到 layui.config 方法主配置信息(经测试好像不能添加额外属性) layui.setter读取主配置属性 layui.extend 方法增加主配置 ...
- 善用oss客户端工具
有个需求:需要我到阿里oss上下载ts文件 估摸了一下100多个只占了6分之一的时间,全下下来得700多个 还不算上正在运行的 正当我手动一个一个点的时候: 100个 总算点完了 全部在桌面是摆着: ...
- 移动端UI自动化Appium测试——Appium server两种启动方式
执行自动化测试之前,需要先运行appium server,这样才能形成server与java client的通信,启动server有两种方式,一种是命令,一种是按钮图标,具体使用如下: 1.用命令启动 ...
- Java基础教程(24)--集合
一.Java集合框架 集合,有时也称为容器,是一个用来存储和管理多个元素的对象.Java中的集合框架定义了一套规范,用来表示和操作集合,使具体操作与实现细节解耦.集合框架都包含下列内容: 接口:这 ...
- dede自定义表单放首页出错的解决办法
一.当自定义表单放首页提交的时候跳出这个页面怎么解决 二.解决办法 可能有多个from表单提交出错,也就是代码冲突的意思,只要把代码检查好,from提交不要重复冲突就可以了
- iOS Programming Auto Layout: Programmatic Constraints 自动布局:通过编程限制
iOS Programming Auto Layout: Programmatic Constraints 1. However, if your views are created in co ...
- 【译】x86程序员手册34-9.7错误代码
9.7 Error Code 错误代码 With exceptions that relate to a specific segment, the processor pushes an error ...
- codevs 1082 线段树练习 3 --分块练习
时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[ ...