Prelude

为什么洛谷上的题解都是剪枝做的啊!就没有人写复杂度靠谱的算法吗!

传送到洛谷:( ̄、 ̄)

传送到BZOJ:( ´・・)ノ(._.`)

本篇博客地址:o(><;)oo


Solution

首先\(O(n^6)\),或者是\(O(n^4 \log^2 n)\)的模拟非常好想,枚举锤子的长宽,然后从左上角开始挨个砸就可以了。

枚举的复杂度是\(O(n^2)\)的,模拟一次的复杂度是\(O(n^4)\)的,也可以用BIT做到一次模拟\(O(n^2 \log^2 n)\)。

仔细想了想发现似乎没法合理枚举,那就只能发掘性质了。

直觉告诉我似乎是行列无关的。

具体来说,我们首先固定锤子的长为1,然后枚举锤子的宽,求出当长为1的时候最大可行的宽,叫做\(c\)。

然后再固定锤子的宽为1,枚举锤子的长,求出当宽为1的时候最大可行的长,叫做\(r\)。

上面两步可以用\(O(n^4)\)的暴力模拟来做,或者是用BIT做到\(O(n^3 \log n)\)。

那么这个\(r\)和\(c\)就是最终答案。

试着证明了一下,确实是这样的,具体证明我没有仔细想,大概感觉是从“每个格子被敲打的次数是行列无关的”这条入手?

然后就A掉了。

因为我比较懒,所以写的是\(O(n^4)\)的方法,毕竟这个模拟常数小嘛,\(O(n^4)\)过100肯定没问题啦。


Code

#include <cstring>
#include <algorithm>
#include <cstdio> using namespace std;
const int MAXN = 110;
int _w; int n, m, a[MAXN][MAXN], tot;
int r, c, b[MAXN][MAXN];
int t[MAXN][MAXN]; bool check( int x ) {
for( int i = 1; i <= r; ++i )
for( int j = 1; j <= c; ++j )
t[i][j] = b[i][j];
for( int i = 1; i <= r; ++i )
for( int j = 1; j <= c-x+1; ++j )
for( int k = j+x-1; k >= j; --k )
t[i][k] -= t[i][j];
for( int i = 1; i <= r; ++i )
for( int j = 1; j <= c; ++j )
if( t[i][j] ) return false;
return true;
} void solve() {
r = n, c = m;
for( int i = 1; i <= r; ++i )
for( int j = 1; j <= c; ++j )
b[i][j] = a[i][j];
for( int x = c; x >= 1; --x )
if( check(x) ) {
tot /= x;
break;
}
r = m, c = n;
for( int i = 1; i <= r; ++i )
for( int j = 1; j <= c; ++j )
b[i][j] = a[j][i];
for( int y = c; y >= 1; --y )
if( check(y) ) {
tot /= y;
break;
}
printf( "%d\n", tot );
} int main() {
_w = scanf( "%d%d", &n, &m );
tot = 0;
for( int i = 1; i <= n; ++i )
for( int j = 1; j <= m; ++j ) {
_w = scanf( "%d", &a[i][j] );
tot += a[i][j];
}
solve();
return 0;
}

【题解】打地鼠 SDOI2011 模拟 行列无关的更多相关文章

  1. BZOJ2241 [SDOI2011]打地鼠 【模拟】

    题目 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. 游戏中的锤子每次只能打一只地 ...

  2. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  3. [题解+总结]NOIP2015模拟题2

    // 此博文为迁移而来,写于2015年7月22日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w72i.html 1.总 ...

  4. B2241 打地鼠 暴力模拟

    大水题!!!30分钟AC(算上思考时间),直接模拟就行,加一个判断约数的剪枝,再多加几个剪枝就可以过(数据巨水) 我也就会做暴力的题了. 题干: Description 打地鼠是这样的一个游戏:地面上 ...

  5. Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)

    猪国杀 - 可读版本 https://mubu.com/doc/2707815814591da4 题目可真长,读题都要一个小时. 这道题很多人都说不可做,耗时间,代码量大,于是,本着不做死就不会死的精 ...

  6. luogu题解P2486[SDOI2011]染色--树链剖分+trick

    题目链接 https://www.luogu.org/problemnew/show/P2486 分析 看上去又是一道强行把序列上问题搬运到树上的裸题,然而分析之后发现并不然... 首先我们考虑如何在 ...

  7. 3403. 题解【NOIP2013模拟】数列变换 (Standard IO)

    先看题目: Description 小X 看到堆成山的数列作业十分头疼,希望聪明的你来帮帮他.考虑数列A=[A1,A2,...,An],定义变换f(A,k)=[A2,A3,,,,.Ak,A1,Ak+2 ...

  8. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  9. 【题解】SDOI2011消耗战

    虚树模板题~洛谷P2495 第一次写虚树,感觉好厉害呀~首先,这道题目的树形dp是非常显然的,要控制一个点&其子树所有点,要么在子树内部割边,要么直接切点该点与父亲的连边.所以dp[u]表示控 ...

随机推荐

  1. Mongodb For Mac OSX && 登录验证

    题外话:尽管有不少人贴出了 <我不用mongodb的十大理由> 等系列文章,但是 NoSQL 的发展不会因此而止步, mongodb 是 NoSQL 的典型代表,楼主还是抱乐观态度的,有人 ...

  2. CentOs6.5中安装和配置vsftp简明教程[转]

    CentOs6.5中安装和配置vsftp简明教程 林涛 发表于:2017-3-17 10:10 分类:WebServer 标签: 101次 一.vsftp安装篇 复制代码代码如下: # 安装vsftp ...

  3. LeetCode 657. Robot Return to Origin (C++)

    题目: There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its ...

  4. TeamWork#3,Week5,Scrum Meeting 11.4

    今天我们进行了第一次Scrum Meeting,总结了最近一段时间的工作成果和经验教训,并分配了每个成员下一步的工作.网络爬虫对我们来说是一个难点,因为之前接触比较少,所以需要从头学起.我们参考了大量 ...

  5. 20145214 《网络对抗技术》 Web安全基础实践

    20145214 <网络对抗技术> Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的 ...

  6. 配置JDBC

    在数据库和MyEclipse都安装好的情况下进行配置: 1.将JDBC(sqljdbc_4.0.2206.100_chs.exe)文件解压到C盘program files下面(也可以将解压后的文件Mi ...

  7. ubuntu下screen的使用

    ubuntu下screen的使用 日常在通过SSH远程到服务器训练网络和深度学习的相关代码,经常需要花费很长的时间.利用SSH远程连接服务器,运行程序需要保证在此期间窗口不能关闭并且连接不能断开,否则 ...

  8. 我的JAVA运算符理解

    基本概念 原码,反码,补码 只需要记住这几句就够了  1.二进制的最高位是符号位:0表示正数,1表示负数 2.正数的原码,反码,补码都一样 3.负数的反码=它的原码符号位不变,其他位取反 4.负数的补 ...

  9. YFCC 100M数据集分析笔记

    --从YFCC 100M数据集中筛选出Geo信息位于中国的数据集 1.YFCC 100M简介 YFCC 100M数据库是2014年来基于雅虎Flickr的影像数据库.该库由1亿条产生于2004年至20 ...

  10. ADO.NET使用using关闭数据库连接

    using (SqlConnection conn = new SqlConnection(source)) { // open the connoction conn.Open(); // Do s ...