牛客练习赛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 ...
随机推荐
- VS2013程序打包报 ISEXP : error -****: An error occurred streaming
原因缺少打包文件 解决方案: 找到打包文件 右击选择 downLoad selected item
- float(double)快速转换int的方法
自己写一个软件渲染器的时候,无意中发现float转换int非常耗时,于是查阅文章,这才有了这个命题,以前不清楚还有这么个机制.网上看了很多文章,搜索到了一个数字6755399441055744,这个是 ...
- 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结
一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...
- _bzoj1002 [FJOI2007]轮状病毒【瞎搞】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1002 这种题真是有毒,很多叼一点的都用matrix tree定理推出了递推公式,也有一些用好 ...
- [poj2096] Collecting Bugs【概率dp 数学期望】
传送门:http://poj.org/problem?id=2096 题面很长,大意就是说,有n种bug,s种系统,每一个bug只能属于n中bug中的一种,也只能属于s种系统中的一种.一天能找一个bu ...
- (六)SpringIoc之延时加载
Spring容器初始化时将所有scope = singleton的bean进行实例化. 通常情况下这是一件好事,因为这样在配置中的错误会更容易发现.但是如果不想spring容器初始化就实例化就要用到延 ...
- CentOS7.5搭建LAMP环境
导言 LAMP环境搭建,网上可以搜到很多的结果.为什么我还要整理一下呢,是因为有些网上给出的解决办法可能仅适用于某些特定的环境下,并不一定适用于所有出现问题的情况. 当然我写本篇的目的也不是保证所有的 ...
- pandas之groupby分组与pivot_table透视表
zhuanzi: https://blog.csdn.net/qq_33689414/article/details/78973267 pandas之groupby分组与pivot_table透视表 ...
- mysql中判断条件
if / case when 判断 SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "m ...
- JS获取服务器端控件ID
很多时候我们需要在JS中对服务器端控件进行一些简单处理,但是这个时候没有必要回发到服务器,让服务器去处理,这个时候就又要用到JS了 那么怎么去获取这个服务器端控件呢?我们知道服务器最终返回到用户界面的 ...