【题解】打地鼠 SDOI2011 模拟 行列无关
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 模拟 行列无关的更多相关文章
- BZOJ2241 [SDOI2011]打地鼠 【模拟】
题目 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. 游戏中的锤子每次只能打一只地 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- [题解+总结]NOIP2015模拟题2
// 此博文为迁移而来,写于2015年7月22日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w72i.html 1.总 ...
- B2241 打地鼠 暴力模拟
大水题!!!30分钟AC(算上思考时间),直接模拟就行,加一个判断约数的剪枝,再多加几个剪枝就可以过(数据巨水) 我也就会做暴力的题了. 题干: Description 打地鼠是这样的一个游戏:地面上 ...
- Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)
猪国杀 - 可读版本 https://mubu.com/doc/2707815814591da4 题目可真长,读题都要一个小时. 这道题很多人都说不可做,耗时间,代码量大,于是,本着不做死就不会死的精 ...
- luogu题解P2486[SDOI2011]染色--树链剖分+trick
题目链接 https://www.luogu.org/problemnew/show/P2486 分析 看上去又是一道强行把序列上问题搬运到树上的裸题,然而分析之后发现并不然... 首先我们考虑如何在 ...
- 3403. 题解【NOIP2013模拟】数列变换 (Standard IO)
先看题目: Description 小X 看到堆成山的数列作业十分头疼,希望聪明的你来帮帮他.考虑数列A=[A1,A2,...,An],定义变换f(A,k)=[A2,A3,,,,.Ak,A1,Ak+2 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- 【题解】SDOI2011消耗战
虚树模板题~洛谷P2495 第一次写虚树,感觉好厉害呀~首先,这道题目的树形dp是非常显然的,要控制一个点&其子树所有点,要么在子树内部割边,要么直接切点该点与父亲的连边.所以dp[u]表示控 ...
随机推荐
- $.each()用法
通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) ...
- 2018-2019-20172321 《Java软件结构与数据结构》第六周学习总结
2018-2019-20172321 <Java软件结构与数据结构>第六周学习总结 教材学习内容总结 第10章 树 10.1概述 树由一个包含结点和边的集构成,其中的元素被储存在这些结点中 ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周
一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...
- 软件项目第一次Sprint评价
1.9-652 首先该小组在第一个冲刺阶段的目标还是很明确的,按照这个目标去完成并实现任务,最后也确实是实现了.通过展示目前已经完成了界面的设计及实现.初步的游戏人物设定.生命值设定.除了完成的这些, ...
- java微信开发之接受消息回复图片或者文本
上回说到 接口连接成功,接下来是真正的开发了. 消息的接收,整个过程就是关注订阅号的用户在微信订阅号中发送消息,微信服务器接收到消息,将消息发给开发者的服务器,服务器接收消息然后可以根据内容进行回复. ...
- String 类 的 使用
package com.StringUse; import java.util.Arrays; /* String 的构造方法: String() 创建一个空内容 的字符串对象. String(byt ...
- “吃神么,买神么”的第一个Sprint计划(第六天)
“吃神么,买神么”项目Sprint计划 ——5.26 星期二(第六天)立会内容与进度 摘要:logo最终出来了,,背景也出来了,可以开始将完成的部分放到同一个文件中,决定剩下的时间把昨晚的部分贴上去 ...
- Internet History, Technology and Security (Week4)
Week4. We are now moving into Week 4! This week, we will be covering commercialization and growth. T ...
- 关于char存储值表示
char里面-128的二进制表示为1000 0000,0的二进制表示为0000 0000 -127的二进制表示为1000 0001, 127的二进制表示为0111 1111. 从-127到-1和1到1 ...
- 结对作业(web)
作业源代码地址:https://git.coding.net/mal123/arithmetic.git 网页版测试地址:http://47.93.197.5:8080/mal_war_explode ...