解题报告 URAL 1051
Pegged 即ural 1051
【Description】
Hades_Fei和他的MM都很喜欢一种叫做Pegged的游戏,这种游戏的中文名字叫做孔明棋(见KongMing_Chess.rar),但是MM觉得Hades_Fei的智商玩这种游戏太小意思了,所以她对这个游戏做了一下小小的改变,在一个无限大的棋盘的格子上有一些棋子,这些棋子构成一个M*N的矩形(M为高度,N为宽度)。请你求出最后最少能剩下几个棋子。
这可难倒了Hades_Fei,所以他需要Hzoiers的帮助…
注:孔明棋的游戏规则:你可以用一个棋子跳过另一个相邻的棋子,被跳过的棋子将被删除。
【Input Format】
本题有多组数据。对于每组数据,仅有一行,两个正整数M,N,最后一行M=N=0,无需处理此行数据。
【Output Format】
对于每组数据,一个正整数,表示最少剩下的棋子数。
【Sample Input】
3 4
0 0
【Sample Output】
2
【Data】
对于30%的数据 |
N,M≤10 |
Task≤2 |
对于60%的数据 |
N,M≤1000 |
Task≤10 |
对于100%的数据 |
N,M≤100000 |
Task≤100 |
这道题,就是一个找规律。
所谓找规律,就是这样。
【Pegged】
最简单的情况是N=1或者M=1的时候,答案肯定是 (n+M)div 2 。不管怎么跳,最后剩下的状态肯定是010101····。
当M=2的时候,N=2,3时分别剩下1个和2个。
M=3的时候,我们可以发现一个很牛逼的方案:
第一步将红色石子跳到1,吃掉3位置的石子,然后把2位子的石子跳到3,吃掉中间的那个石子,然后红色石子跳回到左上角,吃掉3位置的新石子。这样第二行的石子就被吃完了,而红色石子仍然在原来的位置。
也就是说,对于任意三个连续石子,如果它的边上有一个石子,那么这三个石子就能被吃完。
但是对于边界的三个石子则不一定能被消完。比如对于3×3的棋盘,先把第一行剩下一个,然后消第二行,最后把第三行消剩下一个,这样最后只能剩下两个。证明3*3只能剩下2个,可以顺便得出本题结论。
对棋盘内的格子进行染色(建立坐标)。a为(X+Y) mod 3=1的石子个数,b为余2的个数,c为余0的个数。那么每次跳石子,都会使a,b,c中两数减一,一数加一。也就是说这三个数的奇偶性是同步变化的。
当 N*M mod 3 = 0时,a=b=c,这时候反证之。如果最后能只剩下一个,那么a,b,c中必定有两数为0,一个为1,这与三个数的奇偶性矛盾。
进一步考虑 N*M mod 3 <> 0的情况,这时候初始情况必有一个数与其它两个数奇偶性不同,那么理论上可以达到0,0,1的状态。验证比较小的棋盘都最后得到了1个石子。那么就来证明它的成立。下面的证明是比较简单的了。
当(N > 2) and (M > 2)时,如果N*M mod 3 = 0,可证明一定能化成2*3的情况,也就是剩下两个。
如果N*M mod 3 <> 0,可证明一定能化到2*2或2*4或4*4的情况,也就是只剩一个。
上面的“可证明”,其实只是从边界开始吃石子。方案很好画,只是分类讨论烦了一点。
所以,这样代码就好说了。
var n,m:longint;
begin
assign(input,'Pegged.in');reset(input);
assign(output,'Pegged.out');rewrite(output);
read(n,m);
while(n<>0)and(m<>0)do
begin
if(n=1)or(m=1)then writeln((n+m)div 2)
else if((n*m)mod 3=0)then writeln(2)
else writeln(1);
readln(n,m);
end;
close(input);
close(output);
end.
转载于:https://www.cnblogs.com/SueMiller/archive/2011/10/29/2228591.html
解题报告 URAL 1051相关推荐
- Ural 1001 Reverse Root 解题报告
题意: 求出每个数的平方根,然后倒序输出.保留四位小数. 思路: 我在Ural的第二道题,我的第一篇ural解题报告,为什么第一道题没有写呢....你们懂的.之所以选择Ural,是因为那上面的题都是原 ...
- timus 1192. Ball in a Dream URAL 解题报告 平生第一个计算几何+高中物理
timus 1192. Ball in a Dream URAL 解题报告 平生第一个计算几何+高中物理 看来高中物理没白学,这个题用我仅剩下的高中物理学知识分析下竟然找到了方法,再加 ...
- timus 1513. Lemon Tale URAL 解题报告
timus 1513. Lemon Tale URAL 解题报告 题目大意:就是一行字符,LB组成,一个检测员呢和L有仇啊,只要是多余K个连续的L出现,那么这条语句就不合法,为此,三名程序猿 ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 【解题报告】博弈专场 (CF 2000~2200)前五题
[解题报告]博弈专场 (CF 2000+)前五题 A:Fox and Card Game | CF388C 题意 思路 代码 B:Berzerk | CF786A 题意 思路 代码 C:Ithea P ...
- 【解题报告】博弈专场(CF2200~2400)后五题
[解题报告]博弈专场(CF2200~2400)后五题 F:Arpa and a game with Mojtaba | CF850C 题意 思路 代码 G:Tokitsukaze and Duel | ...
- uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)
线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报 分类: ...
- 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...
- 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
最新文章
- html 整个页面变灰
- jquery的$().each,$.each的区别
- JAVA Thread Dumps 三部曲
- 从Openvswitch代码看网络包的旅程
- JNI学习开始篇 基础知识 数据映射及学习资料收集
- go语言中append函数的使用
- tomcat web应用_具有可执行Tomcat的独立Web应用程序
- 直播预告丨云时代的数据库客户端——CloudQuery最佳实践
- 【Java万字笔记】重要基础知识点整理与汇总
- 盘点飞机上的各种警报
- java定义一个short_JDK源码解读第七章:java.lang.Short
- android 置灰不可点击,Android全局实现控件变灰
- 到2020年,将有60%的工作会被人工智能取代?
- python连接数据库mysql失败_python连接mysql失败怎么解决
- 新品推荐∣平行光源OPT-PL系列
- 寒门再难出贵子?学会这个方法,跨越阶层不是梦
- 关于阻止PROE联网的一些想法!
- 大学物理复习-静电场
- 第48章 MDK的编译过程及文件类型全解
- 【ssl】为什么域名SSL证书的价格这么高?有哪些成本?