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

输入:

第一行,有一个正整数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. C++调用C中编译过的函数要加extern "C"

    C++语言支持函数重载,C语言不支持函数重载.函数被C++编译后在库中的名字与C语言的不同.假设某个C 函数的声明如下:void foo(int x, int y);该函数被C 编译器编译后在库中的名 ...

  2. C/C++中float和double的存储结构

    int main (int argc, char **argv) { float a = 1.0f; cout <<"(int&)a = "<<(i ...

  3. sql CHARINDEX函数

    CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置.CHARINDEX函数调用方法如下: CHARINDEX ( expression1 , expression2 [ , start ...

  4. WebDriver - 添加失败截图

    WebDriver失败截图可以通过两种方式实现: 1. Use WebdriverEventListener 第一步:创建自己的WebDriverEventListener 创建自己的WebDrive ...

  5. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  6. 记一次基于Unity的Profiler性能分析

    A. WaitForTargetFPS: Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间    B. Overhead:       Profiler总体时间-所有单项的记录时间总和.用于 ...

  7. JavaScript document

    window -- document用于表现HTML页面当前窗体的内容 document,中文"文档" document是BOM中最重要对象之一 document对象是window ...

  8. angular 零碎知识

    各种服务: $location:可以监听事件的改变 link 在没有设置template的情况下,指令作为标签使用的时候,ele是指令(伪数组的形式); * 如果指令作为属性使用的话,ele是使用该指 ...

  9. jmeter笔记2

    使用jmeter它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. 讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测 ...

  10. [saiku] 免登陆进入管理后台

    上一篇分析了介绍了如何简化和修改saiku的界面[http://www.cnblogs.com/avivaye/p/4877882.html] 这一篇说明下如何去掉免登陆进入saiku 管理台 1.修 ...