博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客练习赛29 B
阅读量:4332 次
发布时间:2019-06-07

本文共 2857 字,大约阅读时间需要 9 分钟。

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

输入描述:

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

输出描述:

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

输入

11 1 1 11 1 1 11 1 1 11 1 1 1

输出

4

说明

良心样例1
示例2

输入

10 0 0 00 0 0 00 0 0 00 0 0 0

输出

0

说明

良心样例2
示例3

输入

31 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

输出

7

说明

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

 

转载于:https://www.cnblogs.com/tingtin/p/9826977.html

你可能感兴趣的文章
css颜色代码大全
查看>>
python:数组/列表(remove()函数、append()函数、sort()函数、reverse()函数)
查看>>
48-Rotate Image
查看>>
swift开源项目精选
查看>>
分解质因数
查看>>
selective_switch.py
查看>>
Alpha通道
查看>>
[HNOI2002]彩票
查看>>
[HNOI2009]无归岛
查看>>
[SDOI2008]Sandy的卡片
查看>>
html元素li移动动态效果
查看>>
程序员的情书!
查看>>
【题解】 bzoj2748 [HAOI2012]音量调节 (动态规划)
查看>>
get改造成post请求
查看>>
BZOJ1718: [Usaco2006 Jan] Redundant Paths 分离的路径
查看>>
1284 2 3 5 7的倍数 分类: 51nod ...
查看>>
关于target=标签
查看>>
设计模式(二)工厂模式
查看>>
HDU 1426 Sudoku Killer【DFS 数独】
查看>>
二分图-匈牙利算法模板
查看>>