Codeforces Round #340 (Div. 2):B. Chocolate
2016-01-24 09:43
447 查看
Bob loves everything sweet. His favorite chocolate bar consists of pieces, each piece may contain a nut. Bob wants to break the bar of chocolate into multiple pieces so that each part would contain
exactly one nut and any break line goes between two adjacent pieces.
You are asked to calculate the number of ways he can do it. Two ways to break chocolate are considered distinct if one of them contains a break between some two adjacent pieces and the other one doesn't.
Please note, that if Bob doesn't make any breaks, all the bar will form one piece and it still has to have exactly one nut.
Input
The first line of the input contains integer n (1 ≤ n ≤ 100) — the number of pieces in the chocolate bar.
The second line contains n integers
ai (0 ≤ ai ≤ 1), where
0 represents a piece without the nut and
1 stands for a piece with the nut.
Output
Print the number of ways to break the chocolate into multiple parts so that each part would contain exactly one nut.
Sample test(s)
Input
Output
Input
Output
Note
In the first sample there is exactly one nut, so the number of ways equals
1 — Bob shouldn't make any breaks.
In the second sample you can break the bar in four ways:
10|10|1
1|010|1
10|1|01
1|01|01
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int n;
int a, key=0;
long long pos[105], ans=1;
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d", &a);
if(a==1) pos[key++] = i;
}
if(key==1 ) printf("1\n");
else if(key==0) printf("0\n"); //这一步,有坑
else {
for(int i = 1; i < key; i++){
ans *= pos[i]-pos[i-1];
// printf("%d %d %d\n", i, pos[i], pos[i-1]);
}
printf("%I64d\n", ans);
}
return 0;
}
exactly one nut and any break line goes between two adjacent pieces.
You are asked to calculate the number of ways he can do it. Two ways to break chocolate are considered distinct if one of them contains a break between some two adjacent pieces and the other one doesn't.
Please note, that if Bob doesn't make any breaks, all the bar will form one piece and it still has to have exactly one nut.
Input
The first line of the input contains integer n (1 ≤ n ≤ 100) — the number of pieces in the chocolate bar.
The second line contains n integers
ai (0 ≤ ai ≤ 1), where
0 represents a piece without the nut and
1 stands for a piece with the nut.
Output
Print the number of ways to break the chocolate into multiple parts so that each part would contain exactly one nut.
Sample test(s)
Input
3 0 1 0
Output
1
Input
5
1 0 1 0 1
Output
4
Note
In the first sample there is exactly one nut, so the number of ways equals
1 — Bob shouldn't make any breaks.
In the second sample you can break the bar in four ways:
10|10|1
1|010|1
10|1|01
1|01|01
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int n;
int a, key=0;
long long pos[105], ans=1;
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d", &a);
if(a==1) pos[key++] = i;
}
if(key==1 ) printf("1\n");
else if(key==0) printf("0\n"); //这一步,有坑
else {
for(int i = 1; i < key; i++){
ans *= pos[i]-pos[i-1];
// printf("%d %d %d\n", i, pos[i], pos[i-1]);
}
printf("%I64d\n", ans);
}
return 0;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 微软Word 2007数学插件 Microsoft Math 提供下载
- 关于C# Math 处理奇进偶不进的实现代码
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例