类似于扫雷游戏,在一些格子中散布着一些地雷,具体的埋藏位置并不清楚,但知道每个格子及其周围八个格子的地雷总数。请问此时正中间那一行最多可能有多少地雷(题目假定所有的输入都是奇数行的)?

输入:

第一行,有一个正整数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
3 3
2 2 1
3 4 3
2 3 2
3 4
1 2 1 1
2 3 3 2
2 2 2 1

Case #1: 1
Case #2: 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)的更多相关文章

  1. 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 ...

  2. Smart internet of things services

    A method and apparatus enable Internet of Things (IoT) services based on a SMART IoT architecture by ...

  3. android GPS定位源码 地图显示位置源码 有用到的小伙伴自提取

    package com.jasgroup.cn.amhdeam; import java.io.IOException; import java.util.Iterator; import andro ...

  4. Python基础1

    本节内容2016-05-30 Python介绍 发展史 Python 2 0r 3? 安装 Hello word程序 变量 用户输入 模块初识 .pyc? 数据类型初识 数据运算 if...else语 ...

  5. Day1-python基础1

    本次学习内容 Python介绍 发展史 版本选择 install 第一个程序hello world 字符编码及注释 变量 用户输入 表达式if...else 一.Python介绍 1)Python由来 ...

  6. Python之路第一课Day1--随堂笔记

    课堂大纲: 一.Python介绍 二.发展史 三.Python 2 or 3? 四.安装 五.Hello World程序 六.变量 七.用户输入 八.模块初识 九..pyc是个什么鬼? 十.数据类型初 ...

  7. Python之路,Day1 - Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  8. python开发 Day1 python基础

    编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下. 编译和解释的区别是什么? 编译器是把源程序的每一条 ...

  9. [转]Maven 划分模块

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

随机推荐

  1. [转]Android WebView播放视频(包括全屏播放),androidwebview

    Android WebView播放视频(包括全屏播放),androidwebview 最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里 ...

  2. const修饰指针

    关于const修饰指针的情况,一般分为如下4种情况: ; const int *a =&b; //情况1 int const *a =&b; //情况2 int* const a =& ...

  3. IOC Container(服务容器)的工作机制

    IOC Container 是laravel的一个核心内容,有了IOC Container在Laravel的强大表现,我们可以在Laravel中实现很大程度的代码维护性.(文档我是看的懵逼懵逼的(*^ ...

  4. SharePoint Web service and template

    SharePoint Web service对应的映射列表 WSS Web   Services Web Reference Administration   Service http://<s ...

  5. Shell基础:变量类型 & 运算符

    Shell变量 Shell支持三种类型的变量 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写. 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$ ...

  6. python中range和xrange的区别

    1.range生成一个列表:xrange生成一个生成器 2.用法都差不多  

  7. 原生JavaScript实现mouseenter

    mouseenter和Mouseleave都是jquery的事件,JavaScript的mouseover和mouseout每个子元素都会触发,从子元素移到父元素也会触发,用起来不很方便,而且触发的太 ...

  8. uva 1631

    1631 Locker A password locker with N digits, each digit can be rotated to 0-9 circularly. You can ro ...

  9. matlab c# 混合编程

    MWArray错误: matlab 64位 vs 32位 1. visual studio没有专门的64位版.但32位版可以在64位系统上面正常使用.2.安装VS2010的时候,在安装选项里面,选择了 ...

  10. 抓包工具tshark使用备忘

         抓包命令行工具tshark可以用于自定制,相比GUI工具可以实现一些自动化,譬如把某些关注的数据抓起下来存放到文本中,然后再分析输出.      demo: std::string deco ...