黑白格

2024-09-06 15:12
文章标签 黑白

本文主要是介绍黑白格,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

小杨有一个 n 行 m 列的网格图,其中每个格子要么是白色,要么是黑色。

小杨想知道至少包含 k 个黑色格子的最小子矩形包含了多少个格子。

输入格式

第一行包含三个正整数 n,m,k,含义如题面所示。

之后 n 行,每行⼀个长度为 m 的 01 串,代表网格图第 i 行格子的颜色,如果为 0,则对应格子为白色,否则为黑色。

输出格式

输出一个整数,代表至少包含 k 个黑色格子的最小子矩形包含格子的数量,如果不存在则输出 0。

输入输出样例

输入 #1

4 5 5
00000
01111
00011
00011

输出 #1

6

说明/提示

样例解释

对于样例 1,假设 (i,j) 代表第 i 行第 j 列,至少包含 5 个黑色格子的最小子矩形的四个顶点为 (2,4),(2,5),(4,4),(4,5),共包含 6 个格子。

数据范围

对于全部数据,保证有 1≤n,m≤100,1≤k≤n×m。

子任务编号得分n,m
120≤10
240n=1,1≤m≤100
340≤100

做法一:暴力

#include <iostream>
using namespace std;int s[110][110];
int main()
{int n,m,k;cin>>n>>m>>k;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char c;cin>>c;s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+(c=='1');}int maxn=2e9;for(int r1=1;r1<=n;r1++)for(int r2=r1;r2<=n;r2++)for(int c1=1;c1<=m;c1++)for(int c2=c1;c2<=m;c2++){int area=(r2-r1+1)*(c2-c1+1);int b=s[r2][c2]-s[r1-1][c2]-s[r2][c1-1]+s[r1-1][c1-1];if(b>=k&&area<maxn)maxn=area;}cout<<(maxn<2e9?maxn:0);return 0;
}

搞一个二位前缀和暴力,打擂台,无了,但是O(n⁴),这道题数据小能过。

---------------------------------------------------------------------------------------------------------------------------------

做法二:二分 

#include <iostream>
using namespace std;int n,m,k,r1,r2,s[110][110];
int f(int a,int b,int c,int d)
{return s[b][d]-s[a-1][d]-s[b][c-1]+s[a-1][c-1];
}
bool check(int mid)
{for(int l=1;l+mid-1<=m;l++){int r=l+mid-1;int b=f(r1,r2,l,r);if(b>=k)return true;}return false;
}
int bs()
{int l=1,r=m;while(l<r){int mid=(l+r)/2;if(check(mid))r=mid;elsel=mid+1;}return l;
}
int main()
{cin>>n>>m>>k;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char c;cin>>c;s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+(c=='1');}int minx=2e9;for(r1=1;r1<=n;r1++)for(r2=r1;r2<=n;r2++){if(f(r1,r2,1,m)<k)continue;int w=bs();int area=(r2-r1+1)*w;if(area<minx)minx=area;}cout<<(minx==2e9?0:minx);return 0;
}

做法:

        1.二层循环固定r1和r2。

        2.二分查找,找宽度(即c1和c2差)。

        3.check里枚举所有可能,有一个满足就return true。

        4.二层循环*二分*check,复杂度O(n³logn)。

细节:

        1.写一个f函数算二维区间和,简洁还能偷懒o(* ̄▽ ̄*)ブ

        2.由于是二分,必须保证两头至少一个是true,不然会出错,所以要提前判断这个r1和r2的最大区间够不够k个,不够continue。

这篇关于黑白格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142357

相关文章

oc 图片变黑白

理论依据: 所谓颜色或灰度级指黑白显示器中显示像素点的亮暗差别,在彩色显示器中表现为颜色的不同,灰度级越多,图像层次越清楚逼真。灰度级取决于每个像素对应的刷新 存储单元的位数和显示器本身的性能。如每个象素的颜色用16位 二进制数表示,我们就叫它16位图,它可以表达2的16次方即65536种颜色。如每一个象素采用24位二进制数表示,我们就叫它24位图,它可以表达2的24次方即16777

HDU4185Oil Skimming(行列匹配||棋盘匹配||黑白染色||1X2矩形覆盖)

题意:找出最多的形如“##”横着竖着都可以,明显的1X2矩形覆盖,直接按坐标和的奇偶来分为二分图。 #include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<set>#include<map>#include<string>#include<cstring>#include<stac

solana智能合约 rust语言 转账黑白名单代码

在 Solana 中,智能合约(也称为链上程序或 Program)主要是使用 Rust 语言编写的。为了实现一个转账功能,并带有黑白名单限制,我们需要创建一个智能合约,该合约能够接收转账请求,并根据预设的黑白名单规则来决定是否允许转账。 下面是一个简单的 Rust 代码示例,展示了如何在 Solana 上实现这样的智能合约。这个示例假设已经熟悉了 Solana 的基本概念和 Rust 语言的基本语

【第57课】SSRF服务端请求Gopher伪协议无回显利用黑白盒挖掘业务功能点

免责声明 本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。 文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具

图片怎么弄成黑白的?关于将图片改成黑白的几种方法

图片怎么弄成黑白的?黑白照片以其独特的艺术魅力和经典的视觉效果,依然在摄影和图像处理中占据重要地位。无论是为了追求怀旧的氛围,还是为了突出图像的构图和光影效果,许多人都希望将彩色图片转换成黑白图片。这不仅可以赋予图像一种独特的情感和风格,还能让观众更加关注画面的细节与纹理,而不是被色彩所分散注意力。黑白图像能够传达更为纯粹和直接的视觉信息。在彩色照片中,不同颜色可能会互相竞争,导致观者很难专注于图

第三篇—基于黑白样本的webshell检测

本篇为webshell检测的第三篇,主要讲的是基于黑白样本的webshell预测,从样本收集、特征提取、模型训练,最后模型评估这四步,实现一个简单的黑白样本预测模型。   若有误之处,望大佬们指出 Ⅰ 基本实现步骤 样本收集:首先,你需要收集大量的黑样本(恶意的webshell)和白样本(正常的web文件)。这些样本将用于训练和测试你的检测模型。特征提取:对于每一个样本,你需要提取出

黑白棋子的移动

Problem Description 有2n个棋子(20≥n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形:○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:○●○●○●○●○

【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)

背景需求: 【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸,1页6张黑白,1张6张白卡)-CSDN博客文章浏览阅读582次,点赞16次,收藏3次。【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸,1页6张黑白,1张6张白卡)https://blog.csdn.net/reasonsummer/article/d

【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸)

背景需求: 前期制作了黑白三角拼图2*2、3*3、4*4,确定了基本模板,就可以批量制作更多格子数 【教学类-58-01】黑白三角拼图01(2*2宫格)固定256种+随机抽取10张-CSDN博客文章浏览阅读522次,点赞13次,收藏16次。【教学类-58-01】黑白三角拼图01(2*2宫格)固定256种+随机抽取10张https://blog.csdn.net/reasonsummer/a

【教学类-58-02】黑白三角拼图02(3*3宫格)262144种

背景需求: 已知黑白三角拼图2*2(4个拼图)一共有256种排列方法 【教学类-58-01】黑白三角拼图01(2*2宫格)256种-CSDN博客文章浏览阅读142次,点赞5次,收藏12次。【教学类-58-01】黑白三角拼图01(2*2宫格)256种https://blog.csdn.net/reasonsummer/article/details/139173885?csdn_shar