题目描述:

  1. 猎人把一对兔子婴儿(一公一母称为一对)放到一个荒岛上,两年之后,它们生00下一对小兔,之后开始每年都会生下一对小兔。生下的小兔又会以同样的方式继续繁殖。
  2. 兔子的寿命都是x(x>=3)年,并且生命的最后一年不繁殖。
  3. 如果岛上的兔子多于10对,那么猎人会每年在兔子们完成繁殖或者仙逝之后,从岛上带走两对最老的兔子。

    请问y年(y>=3)后荒岛上所有的兔子加起来多少岁?(注意, 在条件3执行完之后)

输入: 从命令行输入两行整数,第一行是x,第二行是y

输出: y年后荒岛上所有的兔子岁数的总和

样例:

输入:
3
3
输出:
2

解题思路:

开一个数组, tu[j] 表示在第 某年 年末, j 岁大的兔子对数。 然后每过一年 tu[j] = tu[j-1] (j >= 1), tu[0] 为新生的兔子对数。

手动模拟几组数据

年份(年末)/兔子年龄, 为了简单,先不考虑兔子年龄限制,不考虑超过十对时取走两对年龄大的兔子。

           0        1        2        3        4        5        6      

1          0        1

2          1        0       1

3          1        1       0        1

4          2        1       1        0         1    

5          3        2        1       1        0         1 

6          5         3        2        1       1        0         1 

然后假设 兔子年龄限制为 5, 并且超过十对时取走两对年龄大的兔子。

年份(年末)/兔子年龄,假设 兔子年龄限制为 5, 并且超过十对时取走两对年龄大的兔子。

           0        1        2        3        4        5        6      

1          0        1

2          1        0       1

3          1        1       0        1

4          2        1       1        0         1    

5          3        2        1       1        0        0

6          4        3        2        0       0        0         0 

7          5        4        3        0       0        0         0

吐槽: 年末年初的问题好容易搞混啊,以及兔子生命最后一年的情况,需要静下心慢慢分析,才能“蒙对”题意 -_- || 。

#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <list>
#include <stack>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <stdexcept>
#include <cstdio>
#include <cstdlib>
using namespace std; int result(int x, int y)
{
vector<int> tu(x+5, 0);
tu[1] = 1;
for(int i = 2; i <= y; i++)
{
int newTu = 0;
for(int j = x+1; j >=1; j--)
{
tu[j] = tu[j-1];
if(j >= 2 && j <= x)
newTu += tu[j];
}
tu[0] = newTu; int lastY = 0;
int tot = 0;
for(int j = x; j >= 0; j--)
{
tot += tu[j];
if(lastY == 0 && tu[j])
lastY = j;
}
if(tot > 10)
{
if(tu[lastY] >= 2)
tu[lastY] -= 2;
else
{
tu[lastY] = 0;
for(int k = lastY-1; k >= 0; k--)
if(tu[k])
{
tu[k] -= 1;
break;
}
}
}
} int ans = 0;
for(int i = 1; i <= x; i++)
ans += tu[i] * i; return ans*2;
} int main()
{
int x, y;
cin >> x;
cin >> y;
int res = result(x, y);
cout << res << endl; return 0;
}

2017阿里C++研发工程师-校招-笔试模拟的更多相关文章

  1. 2017阿里C++研发工程师-校招-单词匹配

    题目描述 给一个字符串, 然后给一个字典. 把字符串分解成字典里的单词组成的句子, 请输出所需空格最少的方案.并输出该方案. 样例 例如: 字符串为: str="ilikealibaba&q ...

  2. 专访阿里资深研发工程师窦贤明:PG与商业数据库差距并不明显

    窦贤明认为, 支持类型.功能和语法丰富,性能优良   9月24日,窦贤明将参加在北京举办的线下活动,并做主题为<Greenplum分片案例分析>的分享.值此,他分享了PG.工作上的一些经历 ...

  3. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场 C

    偶尔碰到这题,简单数位DP题,然而我已生疏了…… 这次算是重新想到的,看来对DP的理解有增进了…… dp[i][j][k],表示前i为,mod为j,是否出现2.3.5的剩下的数位可组成的数字.答案就是 ...

  4. 阿里Java研发工程师实习面经

    十分幸运 拿到阿里云的offer,感谢周围无数人对我的支持和鼓励,所以写篇面经希望可以帮助大家. 面试中,运气占很大一部分的,所以你们若是没有通过,一定不要气馁,继续加油. 每个努力的人 都值得钦佩, ...

  5. 阿里Java研发工程师实习面经,附面试技巧

    作者:如何进阿里 链接:https://www.nowcoder.com/discuss/72899?type=0&order=0&pos=17&page=1 来源:牛客网 前 ...

  6. 学生党如何拿到阿里技术offer: 《2016阿里巴巴校招内推offer之Java研发工程师(成功)》

    摘要: 这篇文章字字珠玑,这位面试的学长并非计算机相关专业,但是其技术功底足以使很多计算机专业的学生汗颜,这篇文章值得我们仔细品读,其逻辑条理清晰,问题把握透彻,语言表达精炼,为我们提供了宝贵的学习经 ...

  7. 美团点评2017校招笔试真题-算法工程师A

    美团点评2017校招笔试真题-算法工程师A 1.下面哪种STL容器的实现和其它三个不一样 A. set B. deque C. multimap D. map 正确答案: B STL的容器可以分为以下 ...

  8. 美团点评2017校招笔试真题-算法工程师B

    美团点评2017校招笔试真题-算法工程师B 1.以下关于经典的k-means聚类的说法哪个是错误的? A:k-means聚类算法是全局收敛的 B:k-means的聚类结果和初始聚类中心点的选取有关 C ...

  9. 蚂蚁金服财富技术部,诚招Java研发工程师。校招内推!!!

    蚂蚁金服财富技术部,诚招Java研发工程师. 团队是蚂蚁金服财富技术部核心团队,支持亿级互联网交易清算,在这里不仅能学习到先进的互联网技术,也能了解许多终身受益的金融知识. 内推对象 2020届毕业生 ...

随机推荐

  1. js 常用 DOM 元素宽高

    提示:document.documentElement 和 document.getElementsByTagName('html')[0] 是一样的: 1.视口大小(不包括滚动条,视口字面理解当然是 ...

  2. 01.ZooKeeper安装和介绍

    1.ZooKeeper安装和启动 1.下载解压ZooKeeper ZooKeeper官方地址:http://zookeeper.apache.org/ 下载当前稳定版本:zookeeper-3.4.6 ...

  3. 170322、Spring Boot 性能优化之将Servlet容器变成Undertow

    需求缘起:在研究Spring Boot加速启动的时候,发现我们在实际中,可能比较注重我们服务器的内存的情况,那么我们会想如果在启动的时候,所占用的内存越低是越好,基于这个想法,我们看看Spring B ...

  4. Linux中配置主机之间的免密ssh登陆

    假如 A 要登陆 B在A上操作:1.首先生成密钥对 ssh-keygen (提示时,直接回车即可) 2.再将A自己的公钥拷贝并追加到B的授权列表文件authorized_keys中 ssh-copy- ...

  5. Spring Cloud Zuul与网关中间件

    Spring Cloud Zuul与网关中间件_网易订阅 http://dy.163.com/v2/article/detail/DC7L8UV10511HSJK.html

  6. React实例入门教程(1)基础API,JSX语法--hello world

      前  言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发 ...

  7. linux下安装JDK,及配置环境变量

    首先去官网https://www.oracle.com/technetwork/java/javase/downloads/index.html下载最新的JDK版本: 以下操作在root用户下操作 第 ...

  8. python学习笔记(二)— 字符串(string)

    字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello World!' var2 ...

  9. python基础-第十篇-10.1HTML基础

    htyper text markup language 即超文本标记语言 超文本:就是指页面内可以包含图片.链接,甚至音乐,程序等非文字元素 标记语言:标记(标签)构成的语言 网页==HTML文档,由 ...

  10. python重建二叉树

    # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None ...