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相关推荐

  1. Ural 1001 Reverse Root 解题报告

    题意: 求出每个数的平方根,然后倒序输出.保留四位小数. 思路: 我在Ural的第二道题,我的第一篇ural解题报告,为什么第一道题没有写呢....你们懂的.之所以选择Ural,是因为那上面的题都是原 ...

  2. timus 1192. Ball in a Dream URAL 解题报告 平生第一个计算几何+高中物理

    timus   1192. Ball in a Dream    URAL  解题报告   平生第一个计算几何+高中物理 看来高中物理没白学,这个题用我仅剩下的高中物理学知识分析下竟然找到了方法,再加 ...

  3. timus 1513. Lemon Tale URAL 解题报告

    timus   1513. Lemon Tale    URAL 解题报告 题目大意:就是一行字符,LB组成,一个检测员呢和L有仇啊,只要是多余K个连续的L出现,那么这条语句就不合法,为此,三名程序猿 ...

  4. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  5. 【解题报告】博弈专场 (CF 2000~2200)前五题

    [解题报告]博弈专场 (CF 2000+)前五题 A:Fox and Card Game | CF388C 题意 思路 代码 B:Berzerk | CF786A 题意 思路 代码 C:Ithea P ...

  6. 【解题报告】博弈专场(CF2200~2400)后五题

    [解题报告]博弈专场(CF2200~2400)后五题 F:Arpa and a game with Mojtaba | CF850C 题意 思路 代码 G:Tokitsukaze and Duel | ...

  7. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  8. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  9. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

最新文章

  1. html 整个页面变灰
  2. jquery的$().each,$.each的区别
  3. JAVA Thread Dumps 三部曲
  4. 从Openvswitch代码看网络包的旅程
  5. JNI学习开始篇 基础知识 数据映射及学习资料收集
  6. go语言中append函数的使用
  7. tomcat web应用_具有可执行Tomcat的独立Web应用程序
  8. 直播预告丨云时代的数据库客户端——CloudQuery最佳实践
  9. 【Java万字笔记】重要基础知识点整理与汇总
  10. 盘点飞机上的各种警报
  11. java定义一个short_JDK源码解读第七章:java.lang.Short
  12. android 置灰不可点击,Android全局实现控件变灰
  13. 到2020年,将有60%的工作会被人工智能取代?
  14. python连接数据库mysql失败_python连接mysql失败怎么解决
  15. 新品推荐∣平行光源OPT-PL系列
  16. 寒门再难出贵子?学会这个方法,跨越阶层不是梦
  17. 关于阻止PROE联网的一些想法!
  18. 大学物理复习-静电场
  19. 第48章 MDK的编译过程及文件类型全解
  20. 【ssl】为什么域名SSL证书的价格这么高?有哪些成本?

热门文章

  1. html背景图片内填充,CSS基础——使用图片填充元素背景
  2. 高级威胁的攻击和防护A P T
  3. mybatis association select 性能分析
  4. RICHO 打印机驱动【急速】安装 win10/win7
  5. Python编程基础:已知三角形的两边长及其夹角,求第三边长
  6. Android上使用Vector 矢量图片
  7. 定点数(fixed-point number)的运算
  8. zedboard linux,Linux之关于zedboard的petaLinux使用有感
  9. Android应用安全现状与解决方案
  10. 关于海外网红营销,我想给你提五点建议