炎热的早上,gal男神们被迫再操场上列队,gal男神们本来想排列成x∗x的正方形,可是因为操场太小了(也可能是gal男神太大了),校长安排gal男神们站成多个4∗4的正方形(gal男神们可以正好分成n个正方形)但是有些gal男神对于这种站法颇有微词,所以他们把衣服脱下来拿在手上摇晃示威,站在一条直线上的gal男神可以“交头接耳”,交头接耳会使他们联合起来闹事,人数越多,威胁程度就越大。你作为也反对这种站队方式的体育老师,为了助纣为虐,应该以一种“合理”的方式来排布n个gal男神方阵,使得最大的威胁程度最大。输出这个威胁程度。
以下为化简版题干:
现在有n个由0和1组成的4∗4矩阵,你可以任意排列这些矩阵(注意:你不能旋转或者翻转它们),但是每两个矩阵应该恰好对应。即第一列对第一列(或是第一行对第一行)比如说:
聪明的你一定可以找到一种排列方法使“连续1的序列最长”。我们定义“连续的1序列”为这个序列仅含1且这个序列不拐弯,它可以是横着或者竖着的。请输出最长的“连续的1序列”长度

输入描述:

  1. 第一行一个n
    接下来 4*n行,每行4个数。(仅含0,1)。代表n0/1矩阵。

输出描述:

  1. 一个数字表示最长的“连续的1序列”的长度。
示例1

输入

复制

  1. 1
  2. 1 1 1 1
  3. 1 1 1 1
  4. 1 1 1 1
  5. 1 1 1 1

输出

复制

  1. 4

说明

  1. 良心样例1
示例2

输入

复制

  1. 1
  2. 0 0 0 0
  3. 0 0 0 0
  4. 0 0 0 0
  5. 0 0 0 0

输出

复制

  1. 0

说明

  1. 良心样例2
示例3

输入

复制

  1. 3
  2. 1 0 1 0
  3. 0 0 1 0
  4. 1 0 1 0
  5. 0 1 0 1
  6.  
  7. 1 0 1 0
  8. 0 1 1 1
  9. 1 0 1 1
  10. 1 1 1 0
  11.  
  12. 1 0 1 1
  13. 0 1 0 0
  14. 0 1 0 0
  15. 0 0 0 1

输出

复制

  1. 7

说明

  1. 这回是真良心数据
  2.  
  3. =
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <string>
  7. #include <deque>
  8. #include <set>
  9. #include <queue>
  10. #include <cmath>
  11. #define ll long long
  12. using namespace std;
  13. const int N = 1e5+;
  14. int cnt1[N],cnt2[N];
  15. int a[N][][],b[][];
  16. int l[],r[],u[],d[];
  17. int n;
  18. //0 从左到右,1从右到左 ,2 上 ,3下
  19. int main()
  20. {
  21. scanf("%d",&n);
  22. for(int i=;i<=n;i++)
  23. {
  24. for(int j=;j<=;j++){
  25. for(int k=;k<=;k++){
  26. scanf("%d",&b[j][k]);
  27. }
  28. }
  29. for(int j=;j<=;j++){
  30. for(int k=;k<=;k++){//5的目的时为了确定这一行是否都是1
  31. if(!b[j][k]){
  32. a[i][j][]=k-;//第i个矩阵第j行从左到右第1个0之前有a[i][j][0]个1
  33. break;
  34. }
  35. }
  36. }
  37. for(int j=;j<=;j++){
  38. for(int k=;k>=;k--){
  39. if(!b[j][k]){
  40. a[i][j][]=-k;
  41. break;
  42. }
  43. }
  44. }
  45. for(int j=;j<=;j++){
  46. for(int k=;k<=;k++){
  47. if(!b[k][j]){
  48. a[i][j][]=k-;
  49.  
  50. break;
  51. }
  52. }
  53. }
  54. for(int j=;j<=;j++){
  55. for(int k=;k>=;k--){
  56. if(!b[k][j]){
  57. a[i][j][]=-k;
  58. break;
  59. }
  60. }
  61. }
  62.  
  63. }
  64. //横着
  65. int ans = ;
  66. for(int i=;i<=n;i++){
  67. for(int j=;j<=;j++){
  68. if(a[i][j][]==){
  69. cnt1[j]++;
  70. }
  71. else{
  72. if(a[i][j][]>l[j]&&a[i][j][]>r[j]){
  73. if(a[i][j][]>a[i][j][]){//1个矩阵只能放在一个位置
  74. l[j]=a[i][j][];
  75. }
  76. else{
  77. r[j]=a[i][j][];
  78. }
  79. }
  80. else{
  81. l[j]=max(l[j],a[i][j][]);
  82. r[j]=max(r[j],a[i][j][]);
  83. }
  84. }
  85. }
  86. }
  87. for(int i=;i<=;i++){
  88. ans=max(ans,cnt1[i]*+l[i]+r[i]);//后缀1序列+全1序列+前缀1序列
  89. }
  90. //竖着
  91. for(int i=;i<=n;i++){
  92. for(int j=;j<=;j++){
  93. if(a[i][j][]==){
  94. cnt2[j]++;
  95. }
  96. else{
  97. if(a[i][j][]>u[j]&&a[i][j][]>d[j]){
  98. if(a[i][j][]>a[i][j][]){
  99. u[j]=a[i][j][];
  100. }
  101. else{
  102. d[j]=a[i][j][];
  103. }
  104. }
  105. else{
  106. u[j]=max(u[j],a[i][j][]);
  107. d[j]=max(d[j],a[i][j][]);
  108. }
  109. }
  110. }
  111. }
  112. for(int i=;i<=;i++){
  113. ans=max(ans,cnt2[i]*+u[i]+d[i]);
  114. }
  115. printf("%d\n",ans);
  116. return ;
  117. }

牛客练习赛29 B的更多相关文章

  1. 牛客练习赛 29 E 位运算?位运算!(线段树)

    题目链接  牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...

  2. 牛客练习赛29 F 算式子

    https://www.nowcoder.com/acm/contest/211/F 经典题. 1.分区间 2.向下取整的值变化 & 合并相同值 #include <bits/stdc+ ...

  3. 牛客练习赛29 B 列队

    [题解] 把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀.后缀1最大值和次大值. 还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情 ...

  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. github新手指南

  2. Nuxt使用记录

    代码及插件需要根据环境引入 (服务端没有window,document,浏览器端没有global) const myPlugins = { install(Vue, options) { Vue.pr ...

  3. oo总结

    架构设计 第一次作业 需求分析 这次作业是针对类中的一些元素,如属性,操作,继承,实现等查询,所以这次的架构我们的第一感觉,按照正常的结构在类中存属性操作,继承的父类和实现的接口等. 具体功能 为了实 ...

  4. form-data、x-www-form-urlencoded、raw、binary的区别

    1.form-data: 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件时 ...

  5. Log Structured Merge Trees(LSM) 算法

    十年前,谷歌发表了 “BigTable” 的论文,论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree. LSM是当前被用在许 ...

  6. Redis数据库1

    一.启动服务 #进入redis安装文件夹 cd /usr/local/redis/ #开启服务端(后端开启) ./bin/redis-server ./redis.conf #开启客户端 ./bin/ ...

  7. Map-HashMap-LinkedHashMap-Map.Entry-Collections-可变参数

    一.Map 接口(java.util) 定义:public interface Map<K,V> 介绍:     (1)Map是一个接口,含有两个泛型,创建子类对象的时候,需要传递两个泛型 ...

  8. zabbix2升级zabbix3

    1.停服zabbix2,停服数据库/etc/init.d/zabbix_server stop/etc/init.d/mysqld stop 2.物理备份数据库cd /var/lib/mysql/ta ...

  9. javascript简单计算器实践

    参考部分资料,编写一个简单的计算器案例,虽然完成了正常需求,但是也有不满之处,待后续实力提升后再来补充,先把不足之处列出: 1:本来打算只要打开页面,计算器的输入框会显示一个默认为0的状态,但是在输入 ...

  10. 获取元素Bytagname区别/for循环应用

    一:两种获取元素方式的区别.1.var aLi = oUl.getElementsByTagName('li');TagName前面可以加其他东西,id就只能是document,2,Id是静态的,ta ...