牛客练习赛29 B

输入描述:
第一行一个n。
接下来 4*n行,每行4个数。(仅含0,1)。代表n个0/1矩阵。
输出描述:
一个数字表示最长的“连续的1序列”的长度。
输入
3
1 0 1 0
0 0 1 0
1 0 1 0
0 1 0 1 1 0 1 0
0 1 1 1
1 0 1 1
1 1 1 0 1 0 1 1
0 1 0 0
0 1 0 0
0 0 0 1
说明
这回是真良心数据 =
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
#include <set>
#include <queue>
#include <cmath>
#define ll long long
using namespace std;
const int N = 1e5+;
int cnt1[N],cnt2[N];
int a[N][][],b[][];
int l[],r[],u[],d[];
int n;
//0 从左到右,1从右到左 ,2 上 ,3下
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++){
for(int k=;k<=;k++){
scanf("%d",&b[j][k]);
}
}
for(int j=;j<=;j++){
for(int k=;k<=;k++){//5的目的时为了确定这一行是否都是1
if(!b[j][k]){
a[i][j][]=k-;//第i个矩阵第j行从左到右第1个0之前有a[i][j][0]个1
break;
}
}
}
for(int j=;j<=;j++){
for(int k=;k>=;k--){
if(!b[j][k]){
a[i][j][]=-k;
break;
}
}
}
for(int j=;j<=;j++){
for(int k=;k<=;k++){
if(!b[k][j]){
a[i][j][]=k-; break;
}
}
}
for(int j=;j<=;j++){
for(int k=;k>=;k--){
if(!b[k][j]){
a[i][j][]=-k;
break;
}
}
} }
//横着
int ans = ;
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
if(a[i][j][]==){
cnt1[j]++;
}
else{
if(a[i][j][]>l[j]&&a[i][j][]>r[j]){
if(a[i][j][]>a[i][j][]){//1个矩阵只能放在一个位置
l[j]=a[i][j][];
}
else{
r[j]=a[i][j][];
}
}
else{
l[j]=max(l[j],a[i][j][]);
r[j]=max(r[j],a[i][j][]);
}
}
}
}
for(int i=;i<=;i++){
ans=max(ans,cnt1[i]*+l[i]+r[i]);//后缀1序列+全1序列+前缀1序列
}
//竖着
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
if(a[i][j][]==){
cnt2[j]++;
}
else{
if(a[i][j][]>u[j]&&a[i][j][]>d[j]){
if(a[i][j][]>a[i][j][]){
u[j]=a[i][j][];
}
else{
d[j]=a[i][j][];
}
}
else{
u[j]=max(u[j],a[i][j][]);
d[j]=max(d[j],a[i][j][]);
}
}
}
}
for(int i=;i<=;i++){
ans=max(ans,cnt2[i]*+u[i]+d[i]);
}
printf("%d\n",ans);
return ;
}
牛客练习赛29 B的更多相关文章
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- 牛客练习赛29 F 算式子
https://www.nowcoder.com/acm/contest/211/F 经典题. 1.分区间 2.向下取整的值变化 & 合并相同值 #include <bits/stdc+ ...
- 牛客练习赛29 B 列队
[题解] 把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀.后缀1最大值和次大值. 还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情 ...
- 【并查集缩点+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 ...
随机推荐
- Adobe CC Family (CC 2015) 大师版
Adobe CC Family (CC 2015) 大师版 v5.6#2 ###请彻底卸载旧版后再安装本版! 更新 Adobe Digital Publishing CC 2016.1更新 Adobe ...
- Control中的AOP实现非业务需求
一.能够使用Control中的AOP实现非业务需求的功能 本文目录 一.ActionFilterAttribute类 二.实现自定义Attribute 一.ActionFilterAttribute类 ...
- nodejs模块学习: webpack
nodejs模块学习: webpack nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子来解决现实 ...
- dubbo rest返回值异常Incompatible types: declared root type
2018-08-28 17:26:02,208 [http-bio-9090-exec-1][][][][][] ERROR com.wjs.member.plugin.intercepter.Ser ...
- 零基础逆向工程14_C语言08_指针02_反汇编
1.指针数组 5: char* keyword[] = {"if", "for", "while", "switch"} ...
- 四道java语言练习基础题:
一.==符的使 首先看一段比较有意思的代码 Integer a = 1000,b=1000; Integer c = 100,d=100; public void mRun(final String ...
- javaSe数据类型
在学完了java程序的结构以及注释后呢按照一般的教程我们应该学点什么呢? 没错就是变量和数据类型[其实我的内心是拒绝的,又是无聊的一大堆,不仅无聊,还得掌握] 好了首先介绍什么是变量: 变量:变量 ...
- BZOJ 2539: [Ctsc2000]丘比特的烦恼
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 695 Solved: 260[Submit][Status][Discuss] Description ...
- Bezier(贝塞尔曲线)
CDC::PolyBezierBOOL PolyBezier( const POINT* lpPoints, int nCount ); 和 曲线原理及多段曲线连接处如何光滑连接:第一段曲线要有4个点 ...
- UVA 177 PaperFolding 折纸痕 (分形,递归)
著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条.现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每 ...