Benelux Algorithm Programming Contest 2017(D)

传送门:Problem D

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

 

题意:

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

 

题解:

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

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

 

AC代码:

 1 import java.io.*;
 2 import java.math.*;
 3 import java.util.*;
 4 
 5 public class Main 
 6 {
 7     private static Scanner cin=new Scanner(new BufferedInputStream(System.in));
 8     static BigInteger b[]=new BigInteger[100010];
 9     static BigInteger MOD=new BigInteger("1000000007");
10     public static void main(String[] args) 
11     {
12         int n;
13         n=cin.nextInt();
14         BigInteger now=BigInteger.ONE;//equal initial now=1
15         for(int i=1;i <= n;++i)
16         {
17             now=now.add(now);
18             b[i]=cin.nextBigInteger();
19             if(now.compareTo(b[i]) < 0)
20             {
21                 System.out.println("error");
22                 return ;
23             }
24             now=now.subtract(b[i]);
25         }
26         System.out.println(now.mod(MOD));
27     }
28 }
View Code

 

posted @ 2018-09-19 20:36  HHHyacinth  阅读(223)  评论(0编辑  收藏  举报