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)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...
随机推荐
- Linux下数据库的安装和使用
数据库有多重要就不用说了,每一个计算机相关行业的人都必须要学会基本的数据库操作,因为你总会用到的. 之前转过一些学习资源: 与MySQL的零距离接触 - 慕课网 Python操作MySQL数据库 生物 ...
- C语言中的转义字符
转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将 ...
- 杭JS
杭JS的视频终于出来了.看了Garry Yao的视频依旧看不懂...总体上感觉是在职场上,我不在孤单了,勇敢的前进吧! 玉伯: 视频看了很多,什么情绪管理实践管理,最值得学习的就是知识管理定律了,找到 ...
- C#引用Office.word出错的解决办法-无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass” 【转】
本文章转自 suchso 1.系统找不到 Microsoft.Office.Interop.Word" "Could not load file or assembly 'Micr ...
- Python中一些内建函数及os等模块的用法
len(obj) # 求长度:obj可以是str.list等对象 split(str, num) # str-分割符,默认空格: ...
- JavaWeb学习之环境搭建
1. HTML(Hyper Text Markup Language) , 超文本标记语言. HTML文件的后缀名一般是: .htm , .html 表单(form): 浏览器内核: WebKit , ...
- hdu5879 Cure
题目链接:hdu5879 Cure 题解:用字符串输入.n很大时答案趋近与(π^2)/6. #include<cstdio> #include<algorithm> #incl ...
- poj1651
Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7252 Accepted: ...
- Play framework 2.0 -应用程序全局设置(转)
转载自: http://shenbai.iteye.com/blog/1517366 1.全局对象 在工程中定义全局对象可以允许你操作你的应用程序的全局设置.这个全局对象必须定义在根包下. impor ...
- linux shell中,单引号、 双引号,反引号(``),$()的区别
一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 空格在linux中时作为一个很典型的分隔符,比如 string1=this is a string,这样执行会报错.为了避免这 ...