Benelux Algorithm Programming Contest 2017(D)

时间:2021-07-05 19:16:13

传送门:Problem D

https://www.cnblogs.com/violet-acmer/p/9677435.html

题意:

  研究人员需要使用某种细菌进行实验,给定一个序列代表接下来每个小时所用的细菌数目,已知初始时细菌的数目为 1 ,其数目每小时会翻倍增长,并且等到第一个小时以后开始实验,问最后残余的细菌数目。

题解:

  因为细菌的数目可能会呈指数级上升,所以首先要想到大数。

  然后用 java 模拟一下即可,最后别忘了 mod 1e9+7 。

AC代码:

 import java.io.*;
import java.math.*;
import java.util.*; public class Main
{
private static Scanner cin=new Scanner(new BufferedInputStream(System.in));
static BigInteger b[]=new BigInteger[100010];
static BigInteger MOD=new BigInteger("1000000007");
public static void main(String[] args)
{
int n;
n=cin.nextInt();
BigInteger now=BigInteger.ONE;//equal initial now=1
for(int i=1;i <= n;++i)
{
now=now.add(now);
b[i]=cin.nextBigInteger();
if(now.compareTo(b[i]) < 0)
{
System.out.println("error");
return ;
}
now=now.subtract(b[i]);
}
System.out.println(now.mod(MOD));
}
}