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;
}
posted @ 2020-12-31 10:50  Withinlover  阅读(71)  评论(0编辑  收藏  举报