[bzoj2241]打地鼠
先考虑如何判定一个r*c的矩阵是否符合条件,容易发现左上角的点无法被别的矩阵砸到,要求左上角r*c的矩阵中不能超过最左上角的元素,之后同理不断枚举最上&最左的非0点,可以用差分来优化,复杂度为$o(n^{4})$(n和m同阶)
(然后加上一些整除、倒序枚举的剪枝就可以过了)
正解是这样的,枚举1*c的最大矩阵,枚举r*1的最大矩阵,r*c的矩阵即为答案(这个用差分维护)
为了证明这个的正确性,分为两部分考虑:
1.必要性,即r*c的矩阵合法可以推出1*c和r*1的矩阵合法,显然成立(用c次r*1的矩阵/r次c*1的矩阵即可)
2.充分性,即1*c和r*1的矩阵合法可以推出r*c的矩阵合法,考虑对于当前的左上角,竖着敲了x次,说明每一列都超过了x,那么必然会导致每一行都敲至少x,也就是对r*c的矩阵敲了x次
问题即得证,那么最终正解的复杂度为$o(n^{3})$(n和m同阶)
1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,m,s,ans,a[105][105],b[105][105];
4 bool pd(int r,int c){
5 memcpy(b,a,sizeof(a));
6 for(int i=1;i<=n;i++)
7 for(int j=1;j<=m;j++)
8 if (b[i][j]){
9 if ((i+r-1>n)||(j+c-1>m))return 0;
10 int p=b[i][j];
11 for(int x=i;x<i+r;x++)
12 for(int y=j;y<j+c;y++)
13 if ((b[x][y]-=p)<0)return 0;
14 }
15 return 1;
16 }
17 int main(){
18 scanf("%d%d",&n,&m);
19 for(int i=1;i<=n;i++)
20 for(int j=1;j<=m;j++){
21 scanf("%d",&a[i][j]);
22 s+=a[i][j];
23 }
24 for(int i=n;i;i--)
25 for(int j=m;j;j--)
26 if ((s%(i*j)==0)&&(i*j>ans)&&(pd(i,j)))ans=i*j;
27 printf("%d",s/ans);
28 }
[bzoj2241]打地鼠的更多相关文章
- 【BZOJ2241】【Sdoi2011R1D1】打地鼠
原题传送门 Description 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. ...
- BZOJ2241 [SDOI2011]打地鼠 【模拟】
题目 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. 游戏中的锤子每次只能打一只地 ...
- bzoj2241: [SDOI2011]打地鼠
暴力. O(n^6)暴力卡过,72ms. 莫名其妙做这道题时感觉十分烦躁,难受,只能这样了. O(n^4)的方法是这样差分一下.判断的时候tmp=t[i][j],t[i][j]-=tmp,t[i+r] ...
- 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 2DToolkit官方文档中文版打地鼠教程(一):初始设置
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- iOS版打地鼠游戏源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- 无聊的人用JS实现了一个简单的打地鼠游戏
直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...
- 打地鼠游戏iOS源码项目
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
随机推荐
- 怎样将.h文件添加到项目中
作为C++的初学者,在运行别人的程序时,第一个遇到的问题就是无法将程序中写到的.h文件包含到项目中来.下面来写一下处理方法.本文以easyx.h为例进行说明 首先右键你的工程 选择Properties ...
- Python笔记_1语法总结
前言导读 本章知识点是我在最初期听python视频教程的时候整理总结的笔记 对python语法的认识对以后代码的解读有着很大的帮助. 1 新建python命名规则 新建项目名 :数字编号 项目名称 新 ...
- dp凸优化/wqs二分学习笔记(洛谷4383 [八省联考2018]林克卡特树lct)
qwq 安利一个凸优化讲的比较好的博客 https://www.cnblogs.com/Gloid/p/9433783.html 但是他的暴力部分略微有点问题 qwq 我还是详细的讲一下这个题+这个知 ...
- Miller Rabin 详解 && 小清新数学题题解
在做这道题之前,我们首先来尝试签到题. 签到题 我们定义一个函数:\(qiandao(x)\) 为小于等于 x 的数中与 x 不互质的数的个数.要求 \(\sum\limits _{i=l}^r qi ...
- 写学习abcde的简单AI(C++实现)
#include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> u ...
- 2020.10.9--vj个人赛补题
B - A Tide of Riverscape 题意:给出一组字符串,由'0','1',' . '组成,' . '可以换成 0或1,判断第 i 个和第 i+p 个字符是否可以不相等,如果可以则输出 ...
- Mybatis、maven项目中整合log4j (17)
Mybatis.maven项目总整合log4j java 中Mybatis.maven项目总整合log4j 1.pom增加log4j包引用 2.添加 log4j.properties文件 # java ...
- 搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇!
大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦. 这篇文章我们不谈数据结构了,来谈谈入门分布式踩过的坑.感觉到了分布式这一层,由于技术更新迭代 ...
- 在hive中使用COALESCE进行空值处理
COALESCE (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空值,最终将返 ...
- bash反弹shell
part1:不求甚解的本地复现 攻击端Debian 10.x: 192.168.208.134 受害端Ubuntu : 192.168.208.135 攻击端打开(监听)某端口: 键入命令:[nc ...