Source
Codeforces Round #340 (Div. 2)
My Solution
0 1 0 1 0 1 0
从左向右遍历, 遇到第一个1后开始算(ans = 1), 然后连续的cnt个0 碰到隔断连续0的1的时候 ans *= cnt, cnt = 0, 然后继续访问
这样就把左端的连续0和右端的连续0去掉了
2 发 Wrong answer on test 7
尴尬 最开始的时候只包括了 0 1 0 1 0, 1 0 1, 1 1 1 1 1 1这些情况,
但漏了0 0 0 0 0 0,
所以初始化为 ans = 0; // 最开始的时候是初始化为 1 的
复杂度 O(n)
#include
#include
using namespace std;
typedef long long LL;
const int maxn = 1e6 + 8;
int main()
{
#ifdef LOCAL
freopen("b.txt", "r", stdin);
//freopen("o.txt", "w", stdout);
int T = 2;
while(T--){
#endif // LOCAL
ios::sync_with_stdio(false);
cin.tie(0);
int n, val;
LL cnt = 0, ans = 0;
bool flag = true;
cin>>n;
for(int i = 0; i < n; i++){ cin>>val;
if(flag){
if(val == 1) {flag = false; ans = 1;}
else continue;
}
if(val == 0){
cnt++;
}
else if(cnt != 0){ //末尾是 0 0 不要紧
ans *= (cnt + 1);
cnt = 0;
}
}
//if(cnt1 == 1) cout<<1<<endl;
//else
cout<<ans;
#ifdef LOCAL
cout<<endl;
}
#endif // LOCAL
return 0;
}
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/codeforces-round-340-div-2-b-chocolate/
共有 0 条评论