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

输入:

第一行,有一个正整数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. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

  2. 【bzoj3771】【xsy1728】Triple

    [bzoj3771][xsy1728] 题意 求\(\sum_{i}[a_i=S]+\sum_{i<j}[a_i+a_j=S]+\sum_{i<j<k}[a_i+a_j+a_k=S] ...

  3. is(C# 参考)

    检查对象是否与给定类型兼容. 例如,下面的代码可以确定对象是否为 MyObject 类型的一个实例,或者对象是否为从 MyObject 派生的一个类型:     if (obj is MyObject ...

  4. 5.6 TestNg的使用

          Java语言编写的WebDriver测试程序通常使用单元测试框架运行.TestNG单元测试框架比JUnit单元测试框架更强大,它提供了更多的扩展功能.目前很大一部分自动化测试工程师已经开始 ...

  5. Ubuntu 下 Neo4j单机安装和集群环境安装

    1. Neo4j简介 Neo4j是一个用Java实现的.高性能的.NoSQL图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,通过图中的节点和节点的关系来建模.Neo4j完全兼容A ...

  6. Sql Server聚集索引创建

    create CLUSTERED index IX_ZhuiZIDList_ZID on ZhuiZIDList (ZID)

  7. avatar Logo

    用日志打印出自己的头像logo import java.io.File; import java.io.FileInputStream; import java.io.IOException; imp ...

  8. NSNotification系统通知优化

    最近在github上看到了LRNotificationObserver这个项目,看了一下实现方式,作者通过ARC机制实例化注册对象子类与关联对象的方法来管理注册对象的生命周期.从而省去了系统通知移除的 ...

  9. App开发

    设置App图标 在Assets.xcassets的AppIcon中添加图片. 设置App名称 工程 -> Info -> 添加Key:“Bundle Display Name“ 和 Val ...

  10. Objective-C:Foundation框架-常用类-NSDictionary

    与NSString.NSArray一样,NSDictionary是不可变的,其对应可变类型为NSMutableDictionary.其用法如下: #import <Foundation/Foun ...