mine layer(2008 World Final C)
类似于扫雷游戏,在一些格子中散布着一些地雷,具体的埋藏位置并不清楚,但知道每个格子及其周围八个格子的地雷总数。请问此时正中间那一行最多可能有多少地雷(题目假定所有的输入都是奇数行的)?
输入:
第一行,有一个正整数N,代表有N个测试数据。
每个测试数据的第一行包含两个正整数R(行数,R是奇数)和C(列数)。以下是R行每行C列的正整数。
输出:
每个测试数据输出一行,“Case #X: Y”,x为第几个测试数据,Y为正中间那一行最多可能有的地雷数。
限制条件
输入有R行C列
small
R=3,5
3≤C≤5
Large
3≤R≤49,R是奇数
3≤C≤49
样例1
Input |
Output |
2 |
Case #1: 1 |
样例1地雷的分布只有下图一种:
样例2地雷的分布只有一种:对应题目描述中的例图
分析:
本题从简单情况开始考虑。
1.一维的情况:
每个格子内有一个数字,但具体数字不详。但知道该格子和左右两个相邻的格子内的数字之和。
样例:
一维格子中的数字之和:4 8 9 8 6 6 5
一维格子中的数字: 2 2 4 3 1 2 3
那么,这时正中央格子中的数字最大是多少呢?
2.按模3的余数分类讨论:
考虑上面的样例,把第1、第4和第7三个数加起来就可以得到所有格子的数字之和
把第2和第6二个数加起来就可以得到除正中央格子以外所有格子的数字之和。
两个结果相减,就可以推出正中央的数字为(4+8+5)-(8+6)=3
当长度模3余1时我们都可以这样计算得到正中央的数字(因为R一定为奇数,此时一定存在正中央的格子)
同样,当长度模3余2时,也可以求出两种之和,得到正中央的数字。
另一方面,当长度模3余0时,无法直接计算除正中央格子以外所有格子的数字之和。但是,可以求出重复计算了正中央的格子两次之和,再通过与全体之和相减得到正中央的数字。
3.推广到2维
可以用前面介绍的方法求出每行及其上下两行所含的地雷总数,然后通过相减就能得到正中央那一行地雷的总数了。
4.本题的陷阱
本题求最大值,但其实答案是唯一的。
const maxn=;
var
r,c,n,ans:integer;
a:array[..maxn,..maxn] of integer;
rows:array[..maxn] of integer;
procedure print(x:integer);
begin
writeln(x);
end;
function solve(i:integer):integer;
var j,sum:integer;
begin
sum:=;
if (c mod =) or(c mod =) then
begin
j:=;
while j<= c do begin sum:=sum+a[i,j] ;j:=j+;end;
end
else
begin
j:=;
while j<=c do begin sum:=sum+a[i,j];j:=j+;end;
end;
solve:=sum; end;
function sol(j,m:integer):integer;
var sum:integer;
begin
sum:=;
while j<=m do
begin
sum:=sum+rows[j] ;
j:=j+;
end;
sol:=sum;
end;
function center:integer;
var sum:integer;
begin
if r mod = then
sum:=sol(,r)-sol(,r div -)-sol(r div +,r)
else if r mod = then sum:=sol(,r)-sol(,r div -)-sol(r div +,r)
else begin
sum:=sol(,r div )+sol(r div +,r)-sol(,r-);end;
exit(sum);
end; procedure main(r,c:integer);
var i :integer;
begin
for i:= to r do
begin rows[i]:=solve(i); end;
writeln;
ans:=center;
print(ans);
end;
procedure init;
var k,i,j:integer;
begin
assign(input,'mine.in');reset(input);
readln(n);
for k:= to n do
begin
readln(r,c);
for i:= to r do
for j:= to c do
begin
read(a[i,j]);
end;
main(r,c);
end;
close(input);
end;
begin
init;
end.
mine layer(2008 World Final C)的更多相关文章
- SQL Server 2008 R2 Build List
By Steve Jones, 2014/09/30 (first published: 2010/05/25) This is a list of the builds for SQL Server ...
- Smart internet of things services
A method and apparatus enable Internet of Things (IoT) services based on a SMART IoT architecture by ...
- android GPS定位源码 地图显示位置源码 有用到的小伙伴自提取
package com.jasgroup.cn.amhdeam; import java.io.IOException; import java.util.Iterator; import andro ...
- Python基础1
本节内容2016-05-30 Python介绍 发展史 Python 2 0r 3? 安装 Hello word程序 变量 用户输入 模块初识 .pyc? 数据类型初识 数据运算 if...else语 ...
- Day1-python基础1
本次学习内容 Python介绍 发展史 版本选择 install 第一个程序hello world 字符编码及注释 变量 用户输入 表达式if...else 一.Python介绍 1)Python由来 ...
- Python之路第一课Day1--随堂笔记
课堂大纲: 一.Python介绍 二.发展史 三.Python 2 or 3? 四.安装 五.Hello World程序 六.变量 七.用户输入 八.模块初识 九..pyc是个什么鬼? 十.数据类型初 ...
- Python之路,Day1 - Python基础1
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- python开发 Day1 python基础
编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下. 编译和解释的区别是什么? 编译器是把源程序的每一条 ...
- [转]Maven 划分模块
所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...
随机推荐
- css_兼容IE和FF的写法
CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点. 常见兼容问题: 1.DOCTYPE 影响 CSS 处理2.FF:div 设置 marg ...
- 【转】 Linux下目录结构
装完Linux,首先需要弄清Linux 标准目录结构 / root — 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home — 存储普通用户的个人文件 ftp — 用户 ...
- Linux环境下JDK/Eclipse一键安装脚本
-------------------------------------------------------------------- author:jiangxin Email:jiangxinn ...
- python3.x随手笔记2
对象,价值观和类型 对象 Python的抽象的数据. 所有的数据在一个Python程序 表示对象或对象之间的关系. (在某种意义上,在 符合冯诺依曼模型的代码也“存储程序计算机” 由对象.) 每一个对 ...
- 七天学会NodeJS (原生NodeJS 学习资料 来自淘宝技术团队)
NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. ...
- CentOS中yum安装软件时报错:No package XXX available
yum 安装软件时,报错:No package XXX available. [root@localhost ~]# yum -y install redis Loaded plugins: fast ...
- 【MYSQL】update/delete/select语句中的子查询
update或delete语句里含有子查询时,子查询里的表不能在update或是delete语句中,如含有运行时会报错:但select语句里含有子查询时,子查询里的表可以在select语句中. 如:把 ...
- IO流 总结一
字符流: FileReader FileWriter BufferedReader BufferedWriter readLine(); 字节流: FileInputReader FileOutput ...
- JSON生成c#类代码小工具(转)
原文地址: http://www.cnblogs.com/tianqiq/archive/2015/03/02/4309791.html
- Sql语句统计多表个数并求和
) FROM ((SELECT BaseID FROM dbo.Life_cheliang WHERE BaseCreateDate BETWEEN '2015-6-5' AND '2015-6-11 ...