牛客练习赛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 ...
随机推荐
- [SDOI2013]保护出题人
题目 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者 ...
- 445 Add Two Numbers II 两数相加 II
给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表.你可以假设除了数字 0 之外,这两个数字都不会以零开头.进阶:如果输入链表 ...
- [译]curl_multi_add_handle
NAMEcurl_multi_add_handle - add an easy handle to a multi session添加easy handle到multi session中 SYNOPS ...
- zojDakar Rally(01背包)
01背包 加上每次更新解题数目最多 总用时最少 因为要保证用时最少,要先把时长由小到大排序. 没排序 WA了几小时..链接 #include <iostream> #include< ...
- python的des和3des加解密
1.加密: pyDes.des(key, [mode], [IV], [pad], [padmode]) pyDes.triple_des(key, [mode], [IV], [pad], [pad ...
- ABP Zero最新版源码
获取专业版源码 官网 学习版源码
- 常用linux命令大全 转载自:https://www.cnblogs.com/laov/p/3541414.html(大牛笔记)
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...
- 让px单位自动转换为rem的方法
开发工具: 编辑器:vscode; css预处理器:less;(无具体要求): 步骤: 1. vscode安装cssrem插件: 2. 修改css插件的默认配置,其默认转换p ...
- RGB、YUV和YCbCr介绍【转】
RGB: 就是常说的红(Red).绿(Green)和蓝(Blue),每个图像的像素点由RGB三个通道的值组成. YUV和YCbCr: YUV与RGB的转换: Y'= 0.299*R' + 0.587* ...
- System.Lazy<T>延迟加载
在很多情况下,有些对象需要在使用时加载或根据逻辑动态加载.有些情况如果不延迟加载,可能会影响效率甚至抛出Timeout Exception.如网络操作.数据库操作.文件IO操作 直接上代码,方便我们理 ...