【题解】

  把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀、后缀1最大值和次大值。

  还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情况。

                         0 1 1 0

                         0 1 1 0

                         0 0 0 0

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define LL long long
  5. #define rg register
  6. #define N 200010
  7. using namespace std;
  8. int n,m,b[][],ans[][],f[],pos,pos2,Mx;
  9. bool v[][];
  10. struct rec{
  11. int l,r;
  12. }s[N][][];
  13. inline int read(){
  14. int k=,f=; char c=getchar();
  15. while(c<''||c>'')c=='-'&&(f=-),c=getchar();
  16. while(''<=c&&c<='')k=k*+c-'',c=getchar();
  17. return k*f;
  18. }
  19. int main(){
  20. n=read();
  21. for(rg int i=;i<=n;i++){
  22. memset(v,,sizeof(v));
  23. for(rg int j=;j<;j++)
  24. for(rg int k=;k<;k++) b[j][k]=read();
  25. if(b[][]||b[][]){
  26. int tmp=;
  27. if(b[][]&&b[][]) tmp++;
  28. Mx=max(Mx,tmp);
  29. }
  30. if(b[][]||b[][]){
  31. int tmp=;
  32. if(b[][]&&b[][]) tmp++;
  33. Mx=max(Mx,tmp);
  34. }
  35. if(b[][]||b[][]){
  36. int tmp=;
  37. if(b[][]&&b[][]) tmp++;
  38. Mx=max(Mx,tmp);
  39. }
  40. if(b[][]||b[][]){
  41. int tmp=;
  42. if(b[][]&&b[][]) tmp++;
  43. Mx=max(Mx,tmp);
  44. }
  45. for(rg int j=;j<;j++){
  46. bool ok=;
  47. for(rg int k=;k<;k++)if(!b[j][k]) ok=;
  48. if(ok) ans[][j]+=,v[][j]=;
  49. }
  50. for(rg int j=;j<;j++){
  51. bool ok=;
  52. for(rg int k=;k<;k++)if(!b[k][j]) ok=;
  53. if(ok) ans[][j]+=,v[][j]=;
  54. }
  55. for(rg int j=;j<;j++){
  56. if(v[][j]) continue;
  57. for(rg int k=;k<;k++)if(b[j][k]){
  58. s[i][][j].l++;
  59. }
  60. else break;
  61. for(rg int k=;k>=;k--)if(b[j][k]){
  62. s[i][][j].r++;
  63. }
  64. else break;
  65. }
  66. for(rg int j=;j<;j++){
  67. if(v[][j]) continue;
  68. for(rg int k=;k<;k++)if(b[k][j]){
  69. s[i][][j].l++;
  70. }
  71. else break;
  72. for(rg int k=;k>=;k--)if(b[k][j]){
  73. s[i][][j].r++;
  74. }
  75. else break;
  76. }
  77. // for(rg int j=0;j<4;j++) printf("-%d ",s[i][0][j].l); puts("l");
  78. // for(rg int j=0;j<4;j++) printf("-%d ",s[i][0][j].r); puts("r");
  79. // for(rg int j=0;j<4;j++) printf("+%d ",s[i][1][j].l); puts("l");
  80. // for(rg int j=0;j<4;j++) printf("+%d ",s[i][1][j].r); puts("r");
  81. }
  82. for(rg int j=;j<;j++){
  83. for(rg int k=;k<;k++){
  84. int mx=,mx2=,pos=,pos2=,mx3=,mx4=;
  85. for(rg int i=;i<=n;i++){
  86. if(s[i][j][k].l>mx){
  87. mx=s[i][j][k].l;
  88. pos=i;
  89. }
  90. }
  91. for(rg int i=;i<=n;i++){
  92. if(s[i][j][k].l>mx2&&i!=pos) mx2=s[i][j][k].l;
  93. }
  94. for(rg int i=;i<=n;i++){
  95. if(s[i][j][k].r>mx3){
  96. mx3=s[i][j][k].r;
  97. pos2=i;
  98. }
  99. }
  100. for(rg int i=;i<=n;i++){
  101. if(s[i][j][k].r>mx4&&i!=pos2) mx4=s[i][j][k].r;
  102. }
  103. if(pos!=pos2) ans[j][k]+=mx+mx3;
  104. else ans[j][k]+=max(mx+mx4,mx2+mx3);
  105. // printf("[%d %d %d %d]\n",mx,mx2,mx3,mx4);
  106. }
  107. }
  108. for(rg int i=;i<;i++)
  109. for(rg int j=;j<;j++) Mx=max(Mx,ans[i][j]);
  110. printf("%d\n",Mx);
  111. return ;
  112. }

牛客练习赛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. [SDOI2013]保护出题人

    题目 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者 ...

  2. 445 Add Two Numbers II 两数相加 II

    给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表.你可以假设除了数字 0 之外,这两个数字都不会以零开头.进阶:如果输入链表 ...

  3. [译]curl_multi_add_handle

    NAMEcurl_multi_add_handle - add an easy handle to a multi session添加easy handle到multi session中 SYNOPS ...

  4. zojDakar Rally(01背包)

    01背包 加上每次更新解题数目最多 总用时最少 因为要保证用时最少,要先把时长由小到大排序. 没排序 WA了几小时..链接 #include <iostream> #include< ...

  5. python的des和3des加解密

    1.加密: pyDes.des(key, [mode], [IV], [pad], [padmode]) pyDes.triple_des(key, [mode], [IV], [pad], [pad ...

  6. ABP Zero最新版源码

    获取专业版源码  官网 学习版源码

  7. 常用linux命令大全 转载自:https://www.cnblogs.com/laov/p/3541414.html(大牛笔记)

    Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...

  8. 让px单位自动转换为rem的方法

    开发工具:      编辑器:vscode;     css预处理器:less;(无具体要求): 步骤:   1. vscode安装cssrem插件:   2. 修改css插件的默认配置,其默认转换p ...

  9. RGB、YUV和YCbCr介绍【转】

    RGB: 就是常说的红(Red).绿(Green)和蓝(Blue),每个图像的像素点由RGB三个通道的值组成. YUV和YCbCr: YUV与RGB的转换: Y'= 0.299*R' + 0.587* ...

  10. System.Lazy<T>延迟加载

    在很多情况下,有些对象需要在使用时加载或根据逻辑动态加载.有些情况如果不延迟加载,可能会影响效率甚至抛出Timeout Exception.如网络操作.数据库操作.文件IO操作 直接上代码,方便我们理 ...