2020 算法上机赛 C1 - D HolmiumTS的羊羊牧场
题目描述
HolmiumTS 在 Minecraft 中非常缺少羊毛(问就是GTNH),所以他准备建立一个很大很大的羊羊牧场来提供足够的羊毛。
在Minecraft中,一只在第 \(i\) 天出生的小羊在第 \(i+1\) 天就可以长大,成为成年羊。
每一对成年羊每天可以产下一只小羊,但单独的一只成年羊是不可以产小羊的。
HolmiumTS 在第 \(0\) 天带来了 \(m\) 只小羊,那么第 \(n\) 天结束之后,HolmiumTS 一共会有多少只羊(包括小羊和成年羊)呢?
输入
第一行包含一个正整数,为数据组数 \(t\)
接下来 \(t\) 行,每行2个整数,分别为 \(n,m\)
输出
对于每组数据,输出一行,包含一个整数,为所求的结果
输入样例
1
3 5
输出样例
15
数据范围与约定
\(1\leq t\leq100\)
\(0\leq n,m\leq1e8\)
保证结果小于 \(1e6\)
样例解释
第0天结束,有5只小羊,0只成年羊
第1天结束,有2只小羊,5只成年羊
第2天结束,有3只小羊,7只成年羊
第3天结束,有5只小羊,10只成年羊
提示
如果 TLE 了,注意输入可以有 0,想一想数据实际可能的范围,如何判断最坏情况。
题目背景:游戏《我的世界》(Minecraft),制作:Mojang,整合包《格雷科技新视野》(GregTech New Horizen),制作:DreamMasterXXL
做法
其实就是模拟一下
提示里面已经写了,需要考虑最坏的情况
- 不过其实当 \(m = 2\) 的时候,羊群就会呈指数增长了,虽然输入很夸张但是保证了结果小于 \(1e6\) 所以肯定不会超时。
- 最坏的情况就是 \(m = 0\) 和 \(m = 1\),此时羊群不会有增长
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
inline int read() {
int q=0,w=1;char c=getchar();
while(!isdigit(c)){if(c=='-')w=-1;c=getchar();}
while(isdigit(c))q=q*10+c-'0',c=getchar();
return w*q;
}
int n, m, T;
int main() {
T = read();
while(T--) {
n = read(); m = read();
if(m == 0 || m == 1) {
printf("%d\n", m);
continue;
}
while(n--)
m += m / 2;
printf("%d\n", m);
}
return 0;
}