农场主约翰喜爱对称的事物,眼下他准备把他牧场里的牛放置到N∗M(1≤N≤1,000,000,000; 1≤M≤1,000,000,000)的格子里。为了保持对称性,他用下面的方法放置牛。先放一只牛到牧场的中心格子,如果没有这样的中心格子,他就停止他放置的工作。然后他将牧场分割成四个相同大小的区域(这四个区域被正中心的那只牛所在的行和列所分隔),并将牛用上面的方法安排到四个区域中。他不断地重复着他的分割直到没有中心方格存在或者牧场不能再被细分为止。看下面的例子,如果N=7,M=15,那么约翰将在第4行,第8列放置一头牛并且将牧场分割成四个3∗7的区域。在每一个3∗7的区域的第2行,第4列放置一头牛,并且再将每个区域分割成四个1∗3的区域。放置的过程如下所示(C代表一只牛):

这个牧场必须放置21头牛。另一个例子,如果N=M=5,约翰只需要放置一头牛,因为分割后的四个2∗2的区域没有中心格子了。帮助约翰确定他需要在他的牧场里放置多少头牛。

输入格式:

一行,两个空格隔开的整数:N 和 M

输出格式:

需要的牛的只数

输入样例:

7 15

输出样例:

21

思路:

题目看起来挺复杂的,其实就是考察递归的知识。通过递归,将大问题化解为一个个小问题。

  1. 如果行列都是奇数

    1. 说明存在中间点,牛的数量+1
    2. 继续看划分出来的子区域,子区域的牛的数量要么是4*子区域的子区域的牛的数量,要么是4*0,所以直接+ 4*count(n/2, m/2)
  2. 如果行列不全是奇数
    1. 递归终止,牛在此区域的数量为0

参考代码:

#include<iostream>
using namespace std;int count(int n, int m) {if(n%2==0 || m%2==0) {return 0;} else {return 1 + 4 * count(n / 2, m / 2);}
}int main() {int n, m;   cin>>n>>m;cout<<count(n, m)<<endl;return 0;
}

L1-8 牛的对称 (20 分)相关推荐

  1. 1-4 数组元素的区间删除 (20 分)

    题目: 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: int Delete( int A[] ...

  2. 7-1 打印沙漏 (20 分)

    ** 7-1 打印沙漏 (20 分) ** 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓&q ...

  3. 1062最简分数c语言,1062 最简分数 (20分)C语言

    一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N1/M1和 N2/M​2,要求你按从小到大的顺序列出它们之间 ...

  4. 7-8 估值一亿的AI核心代码 (20 分) 代码有解析

    7-8 估值一亿的AI核心代码 (20 分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文 ...

  5. 1028 人口普查 (20 分)C++ 示例代码

    1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...

  6. (C语言最详细解析)1003 我要通过! (20 分)

    1003 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件 ...

  7. 1014 福尔摩斯的约会 (20 分) Python和C++版本

    1014 福尔摩斯的约会 (20 分) 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...

  8. 7-1 查找书籍(20 分)(程序设计天梯赛模拟练习题)

    7-1 查找书籍(20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书 ...

  9. PTA—输出全排列 (20分) 递归回溯思想

    PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...

最新文章

  1. Ubuntu添加硬盘实验
  2. 二分于最大流之间的关系
  3. JMeter篇01:JMeter在Mac下的安装
  4. 后端技术:Nginx + Spring Boot 实现负载均衡
  5. java衍生作用_关于JAVA衍生出的一点想法
  6. 用户'sa'登录失败(错误18456)解决方案图解
  7. easyUI之Messager(消息窗口)
  8. ubuntu-12.04.2忘记管理员密码(图解)
  9. ASP.NET的几个试题(《C#与.NET程序员面试宝典》)
  10. 生成Treeview树 递归方法
  11. adobe黑体std能商用_请问Adobe 黑体 Std R能免费商用吗?
  12. 双系统时间不一致解决方案
  13. python里apply用法_python中apply函数是什么?
  14. abcd选项后的数据分析_引入新的数据abcs
  15. xpath获取不包含某一子标签的a标签
  16. 学渣的刷题之旅 leetcode刷题 83.删除排序链表中的重复元素
  17. new UI-布局之LinearLayout(线性布局)详解
  18. 【验证工具类-ValidateUtil-java】
  19. cannot connect to 192.168.137.137:5555: 由于目标计算机积极拒绝,无法连接。
  20. 31 | GPU(下):为什么深度学习需要使用 GPU?

热门文章

  1. 退款-微信支付宝进行在线退款时,同一笔退款生成两笔退款订单测试
  2. GULP和Webpack比较
  3. 用iMovie制作app store预览视频
  4. flac文件如何快速转换为wav格式
  5. 【分布式】聊一聊分布式事务
  6. java中的artifact啥意思_maven中的groupId和artifactId到底指的是什么
  7. 算法题/青蛙跳台阶问题
  8. 2020牛客寒假算法基础集训营1 D hanayo和米饭
  9. 从来不敷面膜的人_女人一旦过了30岁,敷面膜要记住“4不要”,否则还不如不敷!...
  10. 等保测评--工业控制系统安全扩展要求