穿越丛林
Problem Description
ljj是一位富有冒险心又很喜欢研究数学的孩纸,有一天,他到一个丛林冒险,这里的树长有像0、4、6、8、9这样形状的洞,他要想穿过丛林,必须从这些树洞里钻过去。这时他忽然萌生了一个特别的想法,统计穿越丛林道路的条数!现在他已经知道了要经过丛林道路所经过的n棵树的顺序,以及与每棵上的树洞的形状的数字。
Input
文件第一行一个整数n,表示丛林中有洞的数的棵数。
接下来一行有n个被空格隔开的数t[i],表示第i棵树长得像的数字。
Output
输出只有一行,为路径条数。
Sample Input
5
0 0 0 6 8
Sample Output
2
Tip
最后一棵树的树洞长得像8,表示两个树洞,有以下两条路径可以穿越丛林,见下图:
Data Constraint
30%的数据,1<=n<=50
60%的数据,1<=n<=500
90%的数据,1<=n<=5000
100%的数据,1<=n<=50000
其中:t[i]∈(0,4,6,8,9),即t[i]属于(0,4,6,8,9)中的某个数。
观察本题,很容易可以知道,我们只需要数有多少个8,对于i个8,答案就是2i。
因此,我们得到如下代码。
#include <cstdio>
int n,tail,a;
int x[50001];
int main()
{
scanf("%d\n",&n);
x[++tail]=1;
while (n--)
{
char c=getchar();
if (c==' ')
c=getchar();
if (c=='8')
for (int i=1;i<=tail;i++)
{
x[i]<<=1;
x[i]+=x[i-1]/10;
x[i-1]%=10;
}
if (x[tail]>=10)
x[tail+1]=x[tail]/10,x[tail]%=10,tail++;
}
for (int i=tail;i;i--)
printf("%d",x[i]);
return 0;
}