A scientist, E. Collie, is going to do some experiments with bacteria. Right now, she has one bacterium. She already knows that this species of bacteria doubles itself every hour. Hence, after one hour there will be 2
bacteria.
E. Collie will do one experiment every hour, for n
consecutive hours. She starts the first experiment exactly one hour after the first bacterium starts growing. In experiment i she will need bi
bacteria.
How many bacteria will be left directly after starting the last experiment? If at any point there are not enough bacteria to do the experiment, print “error”.
Since the answer may be very large, please print it modulo 109+7
.
Input
The input consists of two lines.
The first line contains an integer 1≤n≤105
, the number of experiments.
The second line contains n
integers b1,…,bn, where 0≤bi≤260 is the number of bacteria used in the i
th experiment.
Output
Output a single line containing the number of bacteria that remains after doing all the experiments, or “error”.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn =1e5+10;
const ll mod =1e9+7;
ll solve(int x,int y)
{
ll ans=1;
ll cnt=x;
while(y)
{
if(y&1)
{
ans*=cnt;
}
cnt*=cnt;
y/=2;
}
return ans;
}
int main()
{
ll n;
scanf("%lld",&n);
ll a[maxn];
for(ll i=0; i<n; i++)
{
scanf("%lld",&a[i]);
}
ll num=1;
ll max1=solve(2,60);
int flag1=0;
int flag=1;
for(ll i=0; i<n; i++)
{
if(num>max1)
{
flag1=1;
}
if(flag1)
{
num=(num*2-a[i]%mod+mod)%mod;
}
else
{
num*=2;
if(num<a[i])
{
flag=0;
break;
}
num-=a[i];
}
}
num%=mod;
if(!flag)
printf("error\n");
else
printf("%lld\n",num);
return 0;
}
本文介绍了一个关于细菌增长和实验需求的数学问题。科学家E. Collie拥有一种每小时数量翻倍的细菌,并计划进行一系列实验,每个实验需要特定数量的细菌。文章探讨了如何计算在完成所有实验后剩余的细菌数量,以及在某些情况下可能出现的‘error’提示。
1934

被折叠的 条评论
为什么被折叠?



