P2484 [SDOI2011]打地鼠 题解

【视线追踪】视线追踪的性能评估框架 及 基础知识 文章目录一、 前言二、 眼球追踪基础1. 眼动类型研究2. 基本设备3. 校准 calibration4. 眼球视线和头部姿态的关系5. 视线追踪精确度的评估三、 视线估计算法1. 基于2维回归2. 基于3D模型1) 单摄像头2) 多摄像头3. 基于交叉比4. 基于外观5. 基于眼睛形状的方法四、 实现估计的应用1. 电脑2. 电视3. 头戴设备4. 汽车5. 手持设备6. 设备配置五、 视线追踪的性能指标和错误原因1. 不同平台之间差异性很大2. 影响视线追踪可用性的因素六、 视线追踪系统的性能评估框架1 阅读详情

P2484 [SDOI2011]打地鼠 题解

题目

P2484 [SDOI2011]打地鼠 题解

分析

锤子每次只能将每个洞里打掉一只地鼠,所以对于每次击打,都会打掉 r × c r\times c r×c 只地鼠。而每次击打的范围内的每个洞里必须都要有地鼠,所以地鼠的总数必须被 r × c r\times c r×c 整除。

因为每只地鼠都需要被干掉,所以如果当前方案成立,总可以通过不断在地图左上角寻找有地鼠的洞,再以这个洞为锤子击打的范围的左上角进行击打来打完所有地鼠。

而如果在打地鼠的时候发现击打范围内有已经没有地鼠的洞或者会打到地图外面的话,当前方案就不成立。

思路

由于地图只是个 100 × 100 100\times 100 100×100 的矩形,所以我们完全可以枚举 r r r 和 c c c,只要锤子覆盖的区域大小即 r × c r\times c r×c 能整除地图中的地鼠总数就进行尝试。

根据上文的分析,我们只需要在整个地图左上角找到一个还剩的有地鼠的洞,设这个洞的坐标为 ( x , y ) (x,y) (x,y),然后进行以下操作:

  1. 判断 ( x + r − 1 , y + c − 1 ) (x+r-1,y+c-1) (x+r−1,y+c−1) 是否在地图外面。在的话说明这个锤子不满足题意,结束,否则进行下一步。
  2. 判断 ( x , y ) (x,y) (x,y) 到 ( x + r − 1 , y + c − 1 ) (x+r-1,y+c-1) (x+r−1,y+c−1) 范围内有没有空地鼠洞。如果有的话,说明这个锤子不满足题意,结束,否则进行下一步。
  3. 将 ( x , y ) (x,y) (x,y) 到 ( x + r − 1 , y + c − 1 ) (x+r-1,y+c-1) (x+r−1,y+c−1) 范围内的地鼠数量减一。
  4. 将这个锤子的击打总次数加一。
  5. 回到第 1 1 1 步操作直到所有地鼠洞为空。

因为 ( x + y ) (x+y) (x+y) 的地鼠在锤子大小满足题意的情况下再怎么样都会被打完,所以我们也可以直接将 ( x , y ) (x,y) (x,y) 到 ( x + r − 1 , y + c − 1 ) (x+r-1,y+c-1) (x+r−1,y+c−1) 范围内的地鼠数量减 ( x , y ) (x,y) (x,y) 里的地鼠数量(相当于连续打 ( x , y ) (x,y) (x,y) 里的地鼠数量次),判断减之后有没有为负的洞,有说明锤子不满足题意,没有的话将锤子总击打次数加上 ( x , y ) (x,y) (x,y) 里的地鼠数量,然后继续尝试。这算是个小优化。

最后就输出所有可行的锤子中击打次数最小的值就好了。更详细的解释请参阅代码里的注释。

代码

#pragma GCC optimize(2)
#include <cstdio>
using namespace std;
int n, m, tot = 0;
long long ans = 1145141919810;
int maze[105][105];
int tmaze[105][105]; //因为要尝试多次且每次尝试都会修改地鼠洞内地鼠的数量,
                     //我们需要在每次尝试前复制原始的地图
long long Min(long long a, long long b)
{
    return a > b ? b : a;
}
inline bool findfirst(int &x, int &y) //从地图左上角找到第一个有地鼠的地鼠洞,返回是否找到
{
    for (register int i = 1; i <= n; i++)
    {
        for (register int j = 1; j <= m; j++)
        {
            if (tmaze[i][j])
            {
                x = i, y = j; //找到就将这个洞的坐标传回去
                return 1;
            }
        }
    }
    return 0;
}
inline void dfs(int r, int c, int cnt) //参数表示锤子大小和花费
{
    int x, y;             //用x,y表示目前在左上角找到的地鼠洞为(x,y)
    if (!findfirst(x, y)) //如果没找到有地鼠的洞说明找完了,更新答案并结束
    {
        ans = Min(ans, 1ll * cnt);
        return;
    }
    if (x + r - 1 > n || y + c - 1 > m || cnt >= ans) //操作1,如果要打左上角的地鼠
                                                      //洞锤子会超过地图,说明这组
                                                      //方案不成立
        return;
    int red = tmaze[x][y]; //操作3,将(x,y)到(x+r-1,y+c-1)内的地鼠数量都减去(x,y)内的地鼠数
    for (register int i = x; i <= x + r - 1; i++)
    {
        for (register int j = y; j <= y + c - 1; j++)
        {
            tmaze[i][j] -= red;
            if (tmaze[i][j] < 0) //操作2,如果这个洞里的地鼠数量为负说明这组方案不成立
                return;
        }
    }
    dfs(r, c, cnt + red); //操作4、5,加上操作次数,继续打剩下的地鼠
    return;
}
void cpymaze()
{
    for (register int i = 1; i <= n; i++)
        for (register int j = 1; j <= m; j++)
            tmaze[i][j] = maze[i][j]; //复制原始的地图
}
signed main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            scanf("%d", &maze[i][j]);
            tot += maze[i][j]; //记录地鼠总数
        }
    }
    for (int r = 1; r <= n; r++)
    {
        for (int c = 1; c <= m; c++)
        {
            if (tot % (r * c) == 0) //分析中所说的,只有锤子的覆盖大小能整除地鼠总数才行
            {
                cpymaze();
                dfs(r, c, 0);
            }
        }
    }
    printf("%lld\n", ans);
}
【 Git学习记录(三)】推荐四款主流的Git代码托管平台 —— GitHub、GitLab、Gitee、Coding 了解过Git之后,作为一个程序猿最基本的,你还需要了解目前主流的在线代码托管平台,并至少选择其中一款在平时开发中使用。这里特别介绍以下四款: 国外平台 GitHub —— 全球最流行的代码托管平台 GitLab —— 基于git的仓库管理程序 国内平台 Gitee —— 开源中国旗下的代码托管平台 Coding —— 支持社交元素的代码托管平台 一. GitHub 链接地址:https://github.com/ GitHub目前是全球最流行的代码托管平台(别称:全球最大的同性交友. 阅读详情

相关推荐

独立站如何采集商品?外贸独立站采集教程

从这里Robert了解到还有国内有很多仿牌卖家、微商,都有类似的情况,他们出海的阻碍主要在于支付、物流、推广。8.插件“抓取任务”列表手动点同步,将商品同步到主商城后台商品管理列表(商品默认同步到下架列表中) 后台商品管理下架列表显示已同步商品。5.店铺信息修改完成后,可以开始采集商品,采集时弹窗中会自动识别当前平台及商品链接,分类和相册名称可以自定义 编辑修改。4. 打开采集目标站商品页面,点开谷歌浏览器扩展程序列表,找到Shopyy采集平台,打开配置页。打开弹窗中的“店铺管理”,添加店铺信息。

Jernnifer_mao的博客 1378

P2484 [SDOI2011]打地鼠-题解报告

0x00 思路 思路很简单,直接暴力枚举边长,然后模拟即可,中间有一些小优化,不然会超时。 0x01 暴力&模拟 既然求的是最少的挥舞次数,那么肯定能挥舞,不然无法计算,所以我们写一个 check 函数,里面传入 x,yx,yx,y 表示能否用长为 xxx 和宽为 yyy 的锤子锤完所有的地鼠。由于 aaa 数组随时有可能被更改,所以我们用一个辅助数组 bbb 来存储当前每个格子的地鼠数量,我们需要依次枚举每一个格子,如果这个格子没有地鼠,跳过即可,如果有地鼠,那么需要枚举以 xxx 为长,yyy

cqbzfsk的博客 425

【数字人实战】Windows系统下Fun-CosyVoice3-0.5B-2512本地部署的避坑指南与疑难解析

本文详细介绍了在Windows系统下本地部署Fun-CosyVoice3-0.5B-2512的避坑指南与疑难解析,包括Python环境准备、源码获取、依赖安装、模型下载与WebUI启动等关键步骤。特别针对Windows环境下的常见问题提供了实用解决方案,帮助开发者高效完成部署并充分利用其语音转换与多语言支持功能。

weixin_42521856的博客 375

c++ 入门oj1563打地鼠题解

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

weixin_44617853的博客 1749

新版股票配资系统源码/股票分析系统技术方案

新版股票配资系统;全套源码支持新股申购功能,包含C#+MySQL开发的后台系统及Spring框架,采用C/S架构。注意:本源码仅限技术学习、功能测试及模拟交易使用,严禁用于非法用途,违者责任自负。

q318136906的博客 1643

Vue3实战:集成bpmn-js与Activiti工作流引擎的完整指南

本文详细介绍了如何在Vue3项目中集成bpmn-js流程图编辑器与Activiti工作流引擎,构建一个完整的前端流程设计器。文章重点解析了Vue3响应式系统与bpmn-js集成的核心陷阱及解决方案,并提供了属性面板配置、XML命名空间适配、撤销重做等实用功能的完整实现指南,帮助开发者高效完成工作流系统的前端开发。

weixin_29009881的博客 212

【SDOI2011】打地鼠

【SDOI2012】Longge的问题 【题目描述】 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了: 给定一个整数N,你需要求出Σgcd(i, N)(1 【输入】 输入包含一个整数 N ,如题所示 【输出】 输出包含一个整数,为所求的答案。 【输入样例】 6 【输出样例】 15 【题解】 欧拉函数phi(x)等于不超过

OI技术宅 1274

全球AI算力最强公司分析报告

全球AI算力最强公司分析报告显示,Google凭借自研TPU技术和庞大数据中心网络位居榜首,拥有约100万至150万块等效H100 GPU算力。微软、Meta和亚马逊紧随其后,分别拥有75万、55万和25万块等效H100 GPU。中国企业中,百度、阿里巴巴和腾讯表现突出,华为在国产AI芯片领域领先。技术指标上,NVIDIA H100相比A100性能显著提升,但功耗也大幅增加。未来AI算力需求将持续激增,预计2028年全球市场将超2000亿美元。新兴挑战者如xAI可能改变竞争格局。

MyySophia的博客 5713

BZOJ P2241[sdoi2011]打地鼠

直接暴力枚举锤子的长宽 然后判断 别忘了加点剪枝,不加可能会痿 #include #include #include #define inf 0x7fffffff using namespace std; int n,m,sum,mp[101][101],t[101][101],ans=inf; void work(int x,int y){ for(int i=1;i<=n;i++){

mdnd1234的博客 392

C#函数返回多个值实现实例

本文实例讲解C#函数返回多个值多种实现方法。

qq_30725967的博客 1170

【AFAC2026金融智能-赛题二】2亿像素的面条图,我切了1000刀拼回完美Markdown

摘要: AFAC2026金融智能创新大赛的「复杂金融文档还原挑战」任务是将高分辨率金融文档截图转换为结构化Markdown文本。面对2亿像素的“面条图”和严格的计算限制(禁用主流大模型,仅允许调用FinixDoc-VL API且模型需小于10M),作者提出四层流水线解决方案: 图像预处理:通过文本行投影检测在行间隙处智能切图,避免截断文字; API调度:5路并发轮询请求,结合内容哈希缓存与指数退避重试机制优化调用效率; 后处理:采用最长公共子串匹配去除文本重叠,并设计表格对齐算法修复跨块表格; 结果输出:按

169

2241: [SDOI2011]打地鼠

题目链接题目大意:给定一个m*n的洞穴矩阵,每个洞穴里面有若干地鼠,我们需要选定一个r*c的锤子进行击打,每次击打必须保证r*c的范围内所有洞穴均有地鼠,且每次击打只会打掉每个洞穴恰好一只地鼠,求最小击打次数题解:由于数据水,这题O((nm)3),O((nm)2),二分乱搞都能过……O((nm)^3),O((nm)^2),二分乱搞都能过……首先枚举长和宽,然后判断可行性,判断的时候就是二维区间修改+

蒟蒻的Bzoj记录 634

【python】懂车帝字体反爬逐层解密案例(附完整代码)

懂车帝字体反爬解密,完整代码分享

景天科技苑 2万+

题解 luogu P2484 【[SDOI2011]打地鼠】BZOJ2241 O(N^2.5)

这道题最好可以做到n2.5n2.5n^{2.5},但由于数据弱可以让一些错误的n2n2n^2算法AC 将行和列分开考虑。 枚举每个点时用前缀和记录要减去的数(见注释) 枚举行数(列数)时使用每一行(列)的和的gcd的约数。 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;algorithm&amp;gt; #include&amp;

Ansicht's Blog 314

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

洛谷 P2484 [SDOI2011]打地鼠

洛谷 P2484 [SDOI2011]打地鼠题目题目描述打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中。玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高。游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠。你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次可以

faojie的博客 908

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

P2484 [SDOI2011]打地鼠

\(\color{#0066ff}{ 题目描述 }\) 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中。玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高。 游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠。你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次...

weixin_30826095的博客 215

【BZOJ2484】[SDOI2011]打地鼠(暴力)

【BZOJ2484】[SDOI2011]打地鼠(暴力) 题面 BZOJ 洛谷 题解 看到数据范围这题就应该是一个暴力题了。 先考虑假如我们知道了锤子的大小\(R*C\),那么显然只需要从左上角开始从左往右从上往下一个个砸就行了,因为你砸到当前位置之后左上角一定没有限制了,只有当前这个位置还有限制。所以直接暴力就是\(O(n^6)\)的了。似乎可以\(BIT\)之类的优化一下,差不多可以做到\(O(...

weixin_30646315的博客 230

P2484 [SDOI2011] 枚举 + 二维差分

题意 传送门 P2484 [SDOI2011]打地鼠 题解 O(N2)O(N^2)O(N2) 枚举 r,cr,cr,c,判断打地鼠的可行性,更新答案。对于仍存在 ttt 只地鼠的最左上角的点 (x,y)(x,y)(x,y),其打击范围时确定的,即打击的矩形区域左上角为 (x,y)(x,y)(x,y),打击的次数为 ttt。 那么依次遍历二维区域的点,同时统计各区域已打击的次数即可,朴素的处理复杂度 O(N4)O(N^4)O(N4),瓶颈在于二维区域的朴素修改;考虑将二维区域修改转换为二维差分,同时计算前缀和

neweryyy的博客 93

洛谷 2484 [SDOI2011]打地鼠

【题解】   n^6的做法很好想,然而这样复杂度不对。。   然后我们可以发现R和C可以分开求,这样复杂度降到了n^4. 使用树状数组可以把复杂度降到n^3logn,可以顺利通过。    1 #include<cstdio> 2 #include<algorithm> 3 #define N 1010 4 #define rg regist...

weixin_30912051的博客 95

BZOJ2241&&P2484 [SDOI2011]打地鼠

大模拟! 枚举锤子的大小,并且一个必要条件是锤子的面积必须是地鼠总数的约数,不然肯定打不完 代码 //By AcerMo #include&lt;cmath&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; using namespace...

AcerMoOi之路 514

[2019.3.8]BZOJ2241 [SDOI2011]打地鼠

如果我们确定了\(r\)和\(c\),事实上也确定了打地鼠的方案。 因为所有\(r\times c\)的矩形中,只有1个能覆盖当前还有地鼠的位置组成的图形的角落上的那个洞,所以我们只能在那个角落上砸。 比如,我们目前剩下的地鼠分布为 0 0 0 0 0 0 1 2 0 2 1 2 2 2 3 1 那么我们只能以第二行的第三个位置(那个加粗的1)为左上角砸1次。 做法1 于是我们可以\(O(nm)\...

weixin_34405332的博客 186

[BZOJ 2241][SDOI2011]打地鼠(枚举+预处理)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2241 分析: 鉴于R,C的取值很小,于是可以人为枚举R和C的大小,然后判定这个规格的锤子是否可以锤满棋盘并求出最少的次数 假设R*C的锤子可以锤满棋盘,那么便有了锤的方案:{A1,A2,……,An},易得任意交换这个锤的方案的顺序并没有影响,那么我们不妨把锤棋盘左上角的方案放在第...

weixin_30379911的博客 140

面向过程编程之打地鼠

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 打地鼠小游戏: 1、完成基本布局 2、随机出现小老鼠 1)随机出一个索引 2)根据索引取出td(网格),给td里加一张小老鼠的图片 3)setTimeout()让他隔断时间消失 注:setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。 .

qq_37820215的博客 890

【SDOI 2011】打地鼠

Description 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中。玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高。  游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠。你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次可以击打一片区域。如果

Ciocio 1337

QT-Creator C/C++ 打地鼠小游戏

废话少说先上图: 这个游戏纯属土鳖思路,没有用到什么游戏引擎。 1.使用按钮或QLabel铺满窗口。 2.通过简单算法随机动态的设置按钮矩阵中某个按钮的背景图像。 3.同步2过程反复设置多个按钮背景实现图像动起来,注意调节刷新时间。 4.重写按钮组鼠标事件,设置鼠标移入时光标的图案,可以是个小锤子。 5.单击事件后鼠标同理切换鼠标图案打下和抬起。 6.加入一点声音。 7.没有了...

weixin_30776863的博客 625

BZOJ 2241([SDOI2011]打地鼠-二分判断+贪心)

Description 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中。玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高。 游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠。你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次可以击打一片区域。如果我

nike0good |Oier&ACMer | 熟能生巧 2319

bzoj2241: [SDOI2011]打地鼠

这题的话,先是暴力很容易想到 然后加点判断,可以使复杂度小很多 然后本来还想加个二维树状数组的优化的。。 但由于数据水就没有这个必要了#include<cstdio> #include<cstring> const int MAX=1<<30; const int N=105; int a[N][N]; int A[N][N]; int n,m; int sum=0; int ans=MAX;

OZY的博客 420
上一篇: P6533 RELATIVNOST 题解
if-OF
博客等级 码龄4年 1粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值